Pracuję nad małą jednostronicową aplikacją przy użyciu HTML5. Jedną z funkcji jest wyświetlanie dokumentów PDF osadzonych na stronie, które można wybrać z listy.Dlaczego Chrome korzysta z pamięci podręcznej klienta inaczej w tych dwóch scenariuszach?
NOw Staram się, aby Chrome (początkowo, a następnie wszystkie inne nowoczesne przeglądarki) korzystał z lokalnej pamięci podręcznej klienta, aby wypełnić proste żądanie GET dla dokumentów PDF bez przechodzenia przez serwer (inaczej niż za pierwszym razem oczywiście). Powoduje, że żądam pliku PDF, ustawiając właściwość "data" na elemencie <object>
w kodzie HTML.
Znalazłem working example for XMLHttpRequest (nie <object>
). Jeśli używasz narzędzi deweloperskich Chrome (karta sieciowa) można zobaczyć, że pierwszy wniosek trafia do serwera i powoduje reakcję z tymi nagłówkami:
Cache-Control:public,Public
Content-Encoding:gzip
Content-Length:130
Content-Type:text/plain; charset=utf-8
Date:Tue, 03 Jul 2012 20:34:15 GMT
Expires:Tue, 03 Jul 2012 20:35:15 GMT
Last-Modified:Tue, 03 Jul 2012 20:34:15 GMT
Server:Microsoft-IIS/7.5
Vary:Accept-Encoding
Drugi wniosek jest serwowane w lokalnej pamięci podręcznej bez serwera w obie strony, czego chcę.
Powrót w moim wniosku, że następnie wykorzystywane ASP NET MVC-4 i ustawić
[OutputCache(Duration=60)]
na moim kontrolera. Pierwszy wniosek do regulatora - z URL http://localhost:63035/?doi=10.1155/2007/98732
skutkuje następującymi nagłówkami:
Cache-Control:public, max-age=60, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:08 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
Drugi Wyniki wniosek w innej obie strony do serwera, o wiele szybszą reakcję (sugerujące buforowanie po stronie serwera?), Ale zwraca 200 OK, a te nagłówki:
Cache-Control:public, max-age=53, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:13 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
trzecia prośba do tych samych wyników URL w kolejnym podroż dookoła i odpowiedzi 304 z tych nagłówków:
Cache-Control:public, max-age=33, s-maxage=0
Date:Tue, 03 Jul 2012 20:45:33 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
Moje pytanie brzmi:, w jaki sposób ustawić atrybut OutputCache, aby uzyskać pożądane zachowanie (tj. Żądania PDF są wypełniane z pamięci podręcznej klienta w ciągu X sekund od pierwotnego żądania?
Czy nie robię tego poprawnie, gdy wyświetlam plik PDF, ustawiając właściwość "data" na elemencie <object>
?
Niezupełnie. Ustawienie lokalizacji na Klienta (odpowiednik "Prywatne" w nagłówku HTTP Cache-Control) mówi współużytkowanym lokalizacjom pamięci podręcznej, aby nie buforowały go. Ale nie powinno to wpływać na to, czy przeglądarka klienta zdecyduje się na buforowanie, czy nie. – ToolmakerSteve