Jak zapobiegać buforowaniu w programie Internet Explorer
Ostrzeżenie
Wycofana, nieobsługiwana aplikacja klasyczna Internet Explorer 11 ma zostać trwale wyłączona za pośrednictwem aktualizacji aplikacji Microsoft Edge dla niektórych wersji systemu Windows 10. Aby uzyskać więcej informacji, zobacz artykuł pt. Często zadawane pytania dotyczące wycofywania aplikacji klasycznej Internet Explorer 11.
W tym artykule opisano używanie nagłówków HTTP do kontrolowania buforowania stron sieci Web w programie Internet Explorer.
Oryginalna wersja produktu: Internet Explorer
Oryginalny numer KB: 234067
Podsumowanie
Za pomocą programu Microsoft Internet Information Server (IIS) można łatwo oznaczyć wysoce niestabilne lub poufne strony przy użyciu następującego skryptu na skrajnym początku określonych stron active server pages (ASP):
<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
Wygaśnięcie i nagłówek Wygasa
Zdecydowanie zaleca się, aby wszystkie serwery sieci Web używały schematu do wygaśnięcia wszystkich stron sieci Web. Dobrym rozwiązaniem jest, aby serwer sieci Web nie dostarczał informacji o wygaśnięciu za pośrednictwem nagłówka odpowiedzi HTTP Wygasa dla każdego zasobu zwróconego do żądań klientów. Większość przeglądarek i pośrednich serwerów proxy obecnie przestrzega tych informacji o wygaśnięciu i używa ich do zwiększenia wydajności komunikacji za pośrednictwem sieci.
Zawsze używaj nagłówka Wygasa, aby określić najbardziej rozsądny czas, kiedy określony plik na serwerze musi zostać zaktualizowany przez klienta. Gdy strony są regularnie aktualizowane, następnym okresem aktualizacji jest najbardziej wydajna odpowiedź. Weźmy na przykład codzienną stronę wiadomości w Internecie, która jest aktualizowana codziennie o godzinie 5:00. Serwer sieci Web dla tej strony wiadomości powinien zwrócić nagłówek Wygasa z wartością 5 rano następnego dnia. Po zakończeniu przeglądarka nie musi ponownie kontaktować się z serwerem sieci Web, dopóki strona nie ulegnie zmianie.
Strony, które nie powinny ulec zmianie, powinny być oznaczone datą wygaśnięcia około jednego roku.
W wielu przypadkach serwery sieci Web mają co najmniej jedną nietrwałą stronę na serwerze zawierającym informacje, które mogą ulec zmianie natychmiast. Te strony powinny być oznaczone przez serwer z wartością "-1" dla nagłówka Wygasa. W przypadku przyszłych żądań użytkownika program Internet Explorer zwykle kontaktuje się z serwerem sieci Web w celu uzyskania aktualizacji tej strony za pośrednictwem warunkowego żądania If-Modified-Since. Jednak strona pozostaje w pamięci podręcznej dysku (tymczasowe pliki internetowe). Strona jest używana w odpowiednich sytuacjach bez kontaktu z zdalnym serwerem sieci Web, na przykład:
- gdy przyciski WSTECZ i FORWARD są używane do uzyskiwania dostępu do historii nawigacji.
- gdy przeglądarka jest w trybie offline.
Nagłówek Kontrolka pamięci podręcznej
Niektóre strony są jednak tak niestabilne lub wrażliwe, że nie wymagają buforowania dysku. W tym celu program Internet Explorer obsługuje nagłówek HTTP 1.1 Cache-Control. Ten nagłówek uniemożliwia buforowanie określonego zasobu sieci Web, gdy wartość braku pamięci podręcznej jest określona przez serwer HTTP 1.1.
Strony przechowywane poza pamięcią podręczną nie są dostępne, dopóki przeglądarka nie będzie mogła ponownie prowadzić łączności z serwerem sieci Web. Dlatego serwery powinny używać nagłówka Cache-Control oszczędnie. W większości przypadków preferowane jest użycie opcji Wygasa: -1.
Nagłówek Pragma: No-Cache
Niestety starsze serwery HTTP 1.0 nie mogą używać nagłówka Cache-Control. Ze względu na zgodność z poprzednimi wersjami z serwerami HTTP 1.0 program Internet Explorer obsługuje specjalne użycie nagłówka HTTP Pragma: no-cache. Jeśli klient komunikuje się z serwerem za pośrednictwem bezpiecznego połączenia (https://
), a serwer zwraca nagłówek Pragma: no-cache z odpowiedzią, program Internet Explorer nie buforuje odpowiedzi.
Jednak nagłówek Pragma: no-cache nie był w tym celu. Zgodnie ze specyfikacjami HTTP 1.0 i 1.1 ten nagłówek jest definiowany tylko w kontekście żądania, a nie odpowiedzi. Jest ona przeznaczona dla serwerów proxy, które mogą uniemożliwić niektórym ważnym żądaniom dotarcie do docelowego serwera sieci Web. W przypadku przyszłych aplikacji nagłówek Cache-Control jest właściwym sposobem kontrolowania buforowania.
Tagi META HTTP-EQUIV
Strony HTML umożliwiają specjalną formę HTTP-EQUIV tagu META, która określa określone nagłówki HTTP z poziomu dokumentu HTML. Oto krótka przykładowa strona HTML, która używa zarówno pragma: no-cache, jak i Wygasa: -1:
<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD>
<BODY>
</BODY>
</HTML>
Pragma: brak pamięci podręcznej uniemożliwia buforowanie tylko w przypadku użycia za pośrednictwem bezpiecznego połączenia. Tag META bez pamięci podręcznej jest traktowany identycznie do wygasania: -1, jeśli jest używany na stronie niezabezpieczonej. Strona zostanie buforowana, ale oznaczona jako natychmiast wygasła.
Tagi META-EQUIV kontroli pamięci podręcznej są ignorowane i nie mają wpływu w programie Internet Explorer w wersji 4 lub 5. Aby użyć kontroli pamięci podręcznej, ten nagłówek musi być określony przy użyciu nagłówków HTTP zgodnie z opisem w sekcji Cache-Control powyżej.
Uwaga 16.
Użycie standardowych nagłówków HTTP jest znacznie preferowane w przypadku tagów META. Tagi META zazwyczaj muszą być wyświetlane w górnej części sekcji HTML HEAD. Istnieje co najmniej jeden znany problem z tagiem META HTTP-EQUIV Pragma.
Opcje serwera do buforowania
Jeśli nagłówek Cache-Control musi być używany na stronach innych niż ASP, może być konieczne użycie opcji w konfiguracji serwera w celu automatycznego dodania tego nagłówka. Aby zapoznać się z procesem dodawania nagłówków HTTP do odpowiedzi serwera dla określonego katalogu, zapoznaj się z dokumentem serwera. Na przykład w usługach IIS 4 wykonaj następujące kroki:
- Uruchom Menedżera usług IIS.
- W drzewie komputerów i usług otwórz domyślny serwer sieci Web lub serwer sieci Web, o których mowa. Znajdź katalog zawierający zawartość, która wymaga nagłówka Cache-Control.
- Otwórz okno dialogowe Właściwości dla tego katalogu.
- Wybierz kartę Nagłówki HTTP.
- Wybierz przycisk Dodaj w grupie Niestandardowe nagłówki HTTP i dodaj kontrolkę Cache-Control dla nazwy nagłówka i braku pamięci podręcznej dla wartości nagłówka.
Nie warto używać tego nagłówka globalnie na całym serwerze sieci Web. Ogranicz jego użycie wyłącznie do zawartości, która absolutnie nie może być buforowana na kliencie.
Lista kontrolna problemu
Jeśli zastosowano techniki w tym artykule i nadal występują problemy z buforowaniem i programem Internet Explorer, zapoznaj się z tą przydatną listą kontrolną krok po kroku przed skontaktowaniem się z firmą Microsoft w celu uzyskania pomocy technicznej:
- Czy używasz nagłówka Cache-Control z właściwością ASP
Response.CacheControl
lub za pośrednictwem zwróconego nagłówka HTTP? Jest to jedyny sposób, aby naprawdę zapobiec buforowaniu w programie Internet Explorer. - Czy używasz programu Internet Explorer 4.01 z dodatkiem Service Pack 2 lub nowszym? Nie ma możliwości całkowitego zapobiegania buforowaniu we wcześniejszych wersjach przeglądarki.
- Czy sprawdzono dwukrotnie, czy serwer internetowy ma włączony protokół HTTP 1.1 i zwraca odpowiedzi HTTP 1.1 do programu Internet Explorer? Nagłówki kontroli pamięci podręcznej są nieprawidłowe w odpowiedziach HTTP 1.0.
- Jeśli używasz specyfikacji CGI/ISAPI/Servlets po stronie serwera, czy dokładnie obserwujesz specyfikację HTTP 1.1, szczególnie na temat kończenia nagłówków HTTP CRLF? W interesie wydajności program Internet Explorer zwykle nie jest wyrozumiany z odpowiedziami naruszającymi specyfikację HTTP 1.1. Zwykle powoduje to ignorowanie nagłówków lub raportów o nieoczekiwanych błędach serwera.
- Czy nagłówki HTTP są poprawnie napisane?
Zobacz też
- Aby uzyskać więcej informacji na temat protokołu HTTP 1.1, zobacz ten link zewnętrzny: RFC 2616.
- Pamięć podręczna klienta w usługach IIS