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?

Morgan Cheng
źródło
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,
2
xkcd.com/1854
sudo bangbang

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ść.

dancavallaro
źródło
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.

trochę
źródło
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

Pavel Podlipensky
źródło
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.

mermshaus
źródło
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.

Phil Haselden
źródło
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.

naXa
źródło