Nie jestem pewien, czy jest to problem z serwerem, czy też nie rozumiem, jak naprawdę działa buforowanie HTTP.Błąd buforowania HTTP
Mam aplikację ASP MVC działającą na IIS7. W witrynie znajduje się wiele statycznych treści, w tym wiele plików CSS, JavaScript i plików graficznych.
Dla tych plików chcę przeglądarka buforować je na co najmniej jeden dzień - nasze .css, .js, .gif i plików .png rzadko zmieniają.
Moje web.config idzie tak:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge"
cacheControlMaxAge="1.00:00:00" />
</staticContent>
</system.webServer>
Problem Dostaję to, że przeglądarka (testowane Chrome, IE8 i FX) nie wydają się być buforowanie plików jak ja oczekiwać. Mam ustawienia domyślne (automatycznie sprawdzaj nowsze strony w IE).
Na pierwszej wizycie Content pliki do pobrania jako oczekiwane
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: image/gif
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:29:16 GMT
Content-Length: 918
<content>
myślę że Cache-Control: max-age=86400
powinien poinformować przeglądarkę, by nie żądać ponownie stronę na jeden dzień.
Ok, więc teraz strona jest przeładowana, a przeglądarka żąda obraz ponownie. Tym razem robi się pusty odpowiedź z tych nagłówków:
HTTP/1.1 304 Not Modified
Cache-Control: max-age=86400
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:30:32 GMT
Wygląda więc na to przeglądarka wysłał ETag
back (jako unikalny identyfikator zasobu) i wrócić serwera z 304 Not Modified - informowanie przeglądarki, że może użyć pobranego wcześniej pliku.
Wydaje mi się, że byłoby poprawne dla wielu sytuacjach buforowania, ale tutaj nie chcę dodatkowego obie strony. Nie obchodzi mnie, czy obraz staje się nieaktualny, gdy zmienia się plik na serwerze.
Istnieje wiele z tych plików (nawet sprite-map i tym podobne), a wielu z naszych klientów ma bardzo powolnych sieci. Każda podróż w obie strony do pingowania dla tego statusu zajmuje około 10 do 5 sekundy. Wiele z nich ma również IE6, który ma tylko 2 połączenia HTTP naraz. Rezultatem jest to, że nasza aplikacja wydaje się bardzo powolna dla tych klientów, przy czym każda strona zajmuje dodatkowe kilka sekund, aby sprawdzić, czy statyczna zawartość się nie zmieniła.
nagłówekCo odpowiedź mi brakuje, że spowodowałoby przeglądarkę agresywnie buforować pliki?
Jak ustawić to w .Net web.config dla IIS7?
Czy nie rozumiem, jak działa buforowanie HTTP?
można wyłączyć ETag? To cię może naprawić, ale nie jestem pewien. –
Mam zamiar spróbować usunąć ETag, ale dla mojego serwera testowego wygląda na to, że pasuje do niego – Keith
Po naciśnięciu klawisza odświeżania lub F5 przeglądarka zawsze wykona żądanie serwera (prawdopodobnie żądanie warunkowe) niezależnie od ustawień pamięci podręcznej –