Jakie żądania generują odświeżenia „F5” i „Ctrl + F5” przeglądarki?


394

Czy istnieje standard określający akcje F5i Ctrl + F5wyzwalacze w przeglądarkach internetowych?

Kiedyś eksperymentowałem w IE6 i Firefox 2.x. F5 Odświeżania by wywołać żądanie HTTP wysyłane do serwera z If-Modified-Sincenagłówka, a Ctrl + F5nie miałby takiego nagłówka. W moim rozumieniu, F5 postaram się wykorzystać zawartość pamięci podręcznej w jak największym stopniu, podczas gdy jej Ctrl + F5 celem jest porzucenie całej pamięci podręcznej i ponowne pobranie całej zawartości z serwerów.

Ale dzisiaj zauważyłem, że w niektórych najnowszych przeglądarkach (Chrome, IE8) nie działa już w ten sposób. Zarówno F5i Ctrl + F5wyślij If-Modified-Sincenagłówek.

Więc jak to ma działać lub (jeśli nie ma standardu) w jaki sposób główne przeglądarki różnią się tym, jak wdrażają te funkcje odświeżania?


10
FWIW: chociaż z pewnością może to być temat dla superużytkowników , a nawet pierwotnie zapytany, może być przeznaczony jako nieco skoncentrowany na użytkownikach końcowych, ale w tym momencie zarówno twórcy programów, jak i twórcy stron internetowych uzyskali na nie odpowiedzi i do których powinni się odwoływać, i prawdopodobnie należy go tutaj zostawić . SU ma już kilka innych wersji, bardziej zorientowanych na użytkownika końcowego i nie potrzebuje go ...
— Shog9,

Odpowiedzi:


313

Ogólnie rzecz biorąc:

F5może dać ci tę samą stronę, nawet jeśli zawartość zostanie zmieniona, ponieważ może załadować stronę z pamięci podręcznej. Ale Ctrl- F5wymusza odświeżenie pamięci podręcznej i gwarantuje, że jeśli zawartość zostanie zmieniona, otrzymasz nową zawartość.


86
Jest to dokładne, ale zwróć uwagę, że chociaż Ctrl + F5 spowoduje, że przeglądarka wyrzuci pamięć podręczną i zażąda nowego od serwera, serwer może zignorować nagłówek braku pamięci podręcznej i wyświetlać stronę buforowaną po stronie serwera. Dlatego nawet Ctrl + F5 może zwrócić starą wersję strony, jeśli serwer zignoruje nagłówek braku pamięci podręcznej.
— AaronLS,

F5 odświeży stronę - CTRL + F5 zrobi „twarde” odświeżenie.
— Dimitri Dewaele,

Wspomnij również, że Ctrl-F5 prześle formularz, jeśli zostanie podany.
— jawo

Ok, więc jeśli naciśniesz ctrl + f5, mówisz przeglądarce, aby nie korzystała z pamięci podręcznej, ale co dzieje się w kolejnych żądaniach do tej samej strony? Mam na myśli, czy widzisz starsze wersje strony po obejrzeniu najstarszej? Jeśli widzę wersję 1 strony, ponieważ jest ona w pamięci podręcznej, ale jest już dostępna wersja 2, rozumiem, że naciśnięcie klawiszy Ctrl + F5 sprawi, że zobaczę wersję 2. Następnie zamykam przeglądarkę i ponownie otwieram tę stronę. Czy widzę wersję 1, czy nadal widzę wersję 2? Dzięki.
— molerus

525

To zależy od przeglądarki, ale zachowują się w podobny sposób.

Testowałem FF, IE7, Opera i Chrome.

F5zwykle aktualizuje stronę tylko wtedy, gdy jest zmodyfikowana. Przeglądarka zwykle próbuje użyć wszystkich typów pamięci podręcznej w jak największym stopniu i dodaje do żądania nagłówek „Jeśli zmodyfikowano od”. Opera różni się wysyłaniem „Kontroli pamięci podręcznej: bez pamięci podręcznej”.

CTRL- F5służy do wymuszenia aktualizacji, niezależnie od pamięci podręcznej. IE7 dodaje „Cache-Control: no-cache”, podobnie jak FF, który dodaje również „Pragma: no-cache”. Chrome wykonuje normalne „Jeśli zmodyfikowano od”, a Opera ignoruje ten klucz.

Jeśli dobrze pamiętam, to Netscape był pierwszą przeglądarką, która dodała obsługę kontroli pamięci podręcznej, dodając „Pragma: No-cache” po naciśnięciu CTRL- F5.

Edycja: Zaktualizowano tabelę

Poniższa tabela zawiera informacje o tym, co się stanie, gdy kliknięty zostanie przycisk odświeżania przeglądarki (na żądanie Joela Coehoorna ) oraz nagłówek „max-age = 0” Cache-control.

Zaktualizowana tabela, 27 września 2010 r

┌────────────┬───────────────────────────────────────────────┐
│  UPDATED   │                Firefox 3.x                    │
│27 SEP 2010 │  ┌────────────────────────────────────────────┤
│            │  │             MSIE 8, 7                      │
│ Version 3  │  │  ┌─────────────────────────────────────────┤
│            │  │  │          Chrome 6.0                     │
│            │  │  │  ┌──────────────────────────────────────┤
│            │  │  │  │       Chrome 1.0                     │
│            │  │  │  │  ┌───────────────────────────────────┤
│            │  │  │  │  │    Opera 10, 9                    │
│            │  │  │  │  │  ┌────────────────────────────────┤
│            │  │  │  │  │  │                                │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│          F5│IM│I │IM│IM│C │                                │
│    SHIFT-F5│- │- │CP│IM│- │ Legend:                        │
│     CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since"        │
│      ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache"         │
│    ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache"  │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│      CTRL-R│IM│I │IM│IM│C │ - = ignored                    │
│CTRL-SHIFT-R│CP│- │CP│- │- │                                │
├────────────┼──┼──┼──┼──┼──┤                                │
│       Click│IM│I │IM│IM│C │ With 'click' I refer to a      │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers    │
│  Ctrl-Click│*1│C │CP│IM│C │ refresh-icon.                  │
│   Alt-Click│IM│I │IM│IM│C │                                │
│ AltGr-Click│IM│I │- │IM│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Testowane wersje:

  • Firefox 3.1.6 i 3.0.6 (WINXP)
  • MSIE 8.0.6001 i 7.0.5730.11 (WINXP)
  • Chrome 6.0.472.63 i 1.0.151.48 (WINXP)
  • Opera 10.62 i 9.61 (WINXP)

Uwagi:

  1. Wersja 3.0.6 wysyła I i C, ale 3.1.6 otwiera stronę w nowej karcie, wysyłając normalne żądanie tylko z „I”.

  2. Wersja 10.62 nic nie robi. 9.61 może zrobić C, chyba że była to literówka w mojej starej tabeli.

Uwaga na temat Chrome 6.0.472 : jeśli wykonasz wymuszone przeładowanie (jak CTRL- F5), zachowa się tak, jakby adres URL był wewnętrznie oznaczony, aby zawsze wymuszał przeładowanie. Flaga zostanie wyczyszczona, jeśli przejdziesz do paska adresu i naciśniesz enter.


5
@Joel Coehoorn: Zaktualizowano tabelę, klikając przycisk odświeżania. Kochasz tabele graficzne ASCII, prawda? Kodowanie kolorami było tylko efektem ubocznym kodowania kolorami kodów.
— jakieś

11
Czy nie możesz tego zrobić jako odpowiedniej tabeli HTML?
— John Topley,

13
Do Twojej wiadomości - ta odpowiedź została faktycznie przywołana na tablicach rozwojowych Chrome / śledzenia błędów: code.google.com/p/chromium/issues/detail?id=1906
— Kip

18
@John Topley: Tabele nie są dozwolone, więc odpowiedź brzmi nie.
— jakieś

1
Świetna robota na tym stole - należy do quirksmode. +1. Zastanawiam się, czy istnieje również różnica w tym, jakie nagłówki są używane do żądania zasobów na odświeżonej stronie, takich jak obrazy, arkusze stylów itp.
— James Hart

68

Zaimplementowałem stronę kompatybilną z różnymi przeglądarkami, aby przetestować zachowanie przeglądarki w odświeżaniu (tutaj jest kod źródłowy ) i uzyskać wyniki podobne do @some, ale dla nowoczesnych przeglądarek:

wprowadź opis zdjęcia tutaj


Linki na twojej stronie są zepsute, naprawiłem link w odpowiedzi, ale wiele linków z tej strony jest zepsutych. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
— Juan Mendes

Niestety, o tym - przeprowadzanie migracji blogów. Łącza zostaną jak najszybciej naprawione - przejdź do repozytorium github i pobierz przykłady.
— Pavel Podlipensky

Linki są nadal zepsute. Migracja nie została zakończona?
— bernardn

Czy możesz zaktualizować swoją odpowiedź przy użyciu bieżącej wersji przeglądarek, zwłaszcza Safari i komputerów stacjonarnych, @PavelPodlipensky?
— Greg Dubicki,

9

Przynajmniej w przeglądarce Firefox (wersja 3.5) pamięć podręczna wydaje się być wyłączona, a nie po prostu wyczyszczona. Jeśli na stronie znajduje się wiele wystąpień tego samego obrazu, zostanie on przesłany wiele razy. Dotyczy to również imgtagów dodawanych później przez Ajax / JavaScript.

Więc jeśli zastanawiasz się, dlaczego przeglądarka wciąż pobiera tę samą małą ikonę kilkaset razy na stronie automatycznego odświeżania Ajax, to dlatego, że początkowo załadowałeś stronę za pomocą CTRL- F5.


3

IE7 / 8/9 wydają się zachowywać inaczej w zależności od tego, czy strona jest fokusowa, czy nie.

Jeśli klikniesz na stronę i CTRL+, F5wówczas nagłówki żądania zawierają „Cache-Control: no-cache”. Jeśli klikniesz na pasku adresu / adresu, a następnie naciśnij CTRL+ F5to nie jest.


1

Gdy użytkownik naciśnie, F5chociaż nowe żądanie trafi do serwera WWW, otrzymasz również odpowiedź na to żądanie. Ale kiedy nagłówek odpowiedzi jest analizowany, sprawdza wymagane informacje w pamięci podręcznej przeglądarki. Jeśli wymagane informacje w pamięci podręcznej nie wygasły, informacje te są przywracane z samej pamięci podręcznej.

Gdy użytkownik kliknie CTRL- F5nawet wtedy nowe żądanie trafia do serwera WWW i otrzymuje odpowiedź. Ale tym razem, gdy nagłówek odpowiedzi zostanie przeanalizowany, nie sprawdza żadnych wymaganych informacji w pamięci podręcznej i przekazuje wszystkie zaktualizowane informacje tylko z serwera.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.