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 nietrwałe lub poufne strony przy użyciu następującego skryptu na ekstremalnym początku określonych stron active server pages (ASP):

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>

Wygasanie i nagłówek Wygasa

Zdecydowanie zaleca się, aby wszystkie serwery sieci Web używały schematu do wygasania wszystkich stron sieci Web. Złą praktyką jest, aby serwer sieci Web nie dostarczał informacji o wygaśnięciu za pośrednictwem nagłówka odpowiedzi Http Expires dla każdego zasobu zwróconego do żądających klientów. Większość przeglądarek i pośrednich serwerów proxy szanuje te informacje 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 dany plik na serwerze musi zostać zaktualizowany przez klienta. Gdy strony są regularnie aktualizowane, następny okres aktualizacji jest najbardziej efektywną odpowiedzią. Weźmy na przykład codzienną stronę wiadomości w Internecie, która jest aktualizowana codziennie o 5 rano. Serwer sieci Web dla tej strony wiadomości powinien zwrócić nagłówek Expires z wartością 5:00 następnego dnia. Po zakończeniu przeglądarka nie musi ponownie kontaktować się z serwerem sieci Web, dopóki strona się nie zmieni.

Strony, które nie powinny ulec zmianie, powinny być oznaczone datą wygaśnięcia wynoszącą około jednego roku.

W wielu przypadkach serwery sieci Web mają co najmniej jedną nietrwałą stronę na serwerze zawierającą informacje, które mogą ulec natychmiastowej zmianie. 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 zaktualizowania 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 kontaktowania się ze zdalnym serwerem sieci Web, takim jak:

  • gdy przyciski BACK i FORWARD są używane do uzyskiwania dostępu do historii nawigacji.
  • gdy przeglądarka jest w trybie offline.

Nagłówek Cache-Control

Niektóre strony są jednak tak nietrwałe lub wrażliwe, że nie wymagają buforowania dysku. W tym celu program Internet Explorer obsługuje nagłówek Cache-Control HTTP 1.1. 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, które są przechowywane poza pamięcią podręczną, nie są dostępne, dopóki przeglądarka nie będzie mogła ponownie skontaktować serwera sieci Web. Dlatego serwery powinny oszczędnie używać nagłówka Cache-Control. 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. W celu zapewnienia zgodności 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 MET PROTOKOŁU HTTP-EQUIV

Strony HTML zezwalają na specjalną formę HTTP-EQUIV tagu META, która określa konkretne nagłówki HTTP z dokumentu HTML. Poniżej przedstawiono krótką przykładową stronę HTML, która używa obu elementów Pragma: no-cache i Expires: -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 wtedy, gdy jest używane przez bezpieczne połączenie. Tag Pragma: no-cache META jest traktowany identycznie jak Wygasa: -1, jeśli jest używany na niezabezpieczonej stronie. Strona zostanie zapisana w pamięci podręcznej, ale oznaczona jako natychmiast wygasła.

Cache-Control tagi HTTP-EQUIV META są ignorowane i nie mają żadnego wpływu w programie Internet Explorer w wersji 4 lub 5. Aby można było używać funkcji Cache-Control, ten nagłówek należy określić przy użyciu nagłówków HTTP zgodnie z opisem w powyższej sekcji Cache-Control.

Uwaga

Użycie standardowych nagłówków HTTP jest zdecydowanie preferowane w porównaniu z tagami META. Tagi META zwykle muszą być wyświetlane w górnej części sekcji HTML HEAD. Istnieje co najmniej jeden znany problem z tagiem META Pragma HTTP-EQUIV.

Opcje serwera na potrzeby 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:

  1. Uruchom Menedżera usług IIS.
  2. W drzewie komputerów i usług otwórz domyślny serwer sieci Web lub dany serwer internetowy. Znajdź katalog zawierający zawartość, która wymaga nagłówka Cache-Control.
  3. Otwórz okno dialogowe Właściwości dla tego katalogu.
  4. Wybierz kartę Nagłówki HTTP .
  5. Wybierz przycisk Dodaj w grupie Niestandardowe nagłówki HTTP i dodaj Cache-Control dla nazwy nagłówka i braku pamięci podręcznej dla wartości nagłówka.

Używanie tego nagłówka globalnie na całym serwerze sieci Web nie jest dobrym pomysłem. Ogranicz jego użycie wyłącznie do zawartości, która absolutnie nie może być buforowana na kliencie.

Lista kontrolna problemu

Jeśli zostały zastosowane techniki w tym artykule i nadal masz 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 , czy 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 uniemożliwienia buforowania we wcześniejszych wersjach przeglądarki.
  • Czy sprawdzono dwukrotnie, czy serwer internetowy ma włączony protokół HTTP 1.1 i czy zwraca odpowiedzi HTTP 1.1 do programu Internet Explorer? Cache-Control nagłówki są nieprawidłowe w odpowiedziach HTTP 1.0.
  • Jeśli używasz CGI/ISAPI/Servlets po stronie serwera, czy dokładnie postępujesz zgodnie ze specyfikacją HTTP 1.1, szczególnie jeśli chodzi o zakończenie crlf nagłówków HTTP? W interesie wydajności program Internet Explorer jest zwykle bezlitosny dla odpowiedzi naruszających specyfikację HTTP 1.1. Zwykle powoduje to ignorowane nagłówki lub raporty o nieoczekiwanych błędach serwera.
  • Czy nagłówki HTTP są poprawnie napisane?

Zobacz też