Какие запросы генерируют обновления браузеров "F5" и "Ctrl + F5"? - PullRequest
384 голосов
/ 22 декабря 2008

Существует ли стандарт для каких действий F5 и Ctrl + F5 триггер в веб-браузерах?

Однажды я экспериментировал с IE6 и Firefox 2.x. Обновление F5 вызовет HTTP-запрос, отправленный на сервер с заголовком If-Modified-Since, в то время как Ctrl + F5 не будет иметь такого заголовка. В моем понимании F5 будет пытаться максимально использовать кэшированный контент, тогда как Ctrl + F5 предназначен для того, чтобы отказаться от всего кэшированного контента и просто снова извлечь весь контент с серверов.

Но сегодня я заметил, что в некоторых последних браузерах (Chrome, IE8) он больше не работает таким образом. И F5 и Ctrl + F5 отправляют заголовок If-Modified-Since.

Так, как это должно работать, или (если нет стандарта), как основные браузеры отличаются тем, как они реализуют эти функции обновления?

Ответы [ 6 ]

520 голосов
/ 22 декабря 2008

Это зависит от браузера, но они ведут себя аналогичным образом.

Я тестировал FF, IE7, Opera и Chrome.

F5 обычно обновляет страницу, только если она изменена. Браузер обычно старается использовать все типы кэша в максимально возможной степени и добавляет в запрос заголовок «If-Modified-Since». Opera отличается отправкой «Cache-Control: no-cache».

CTRL - F5 используется для принудительного обновления без учета любого кэша. IE7 добавляет «Cache-Control: no-cache», как и FF, который также добавляет «Pragma: no-cache». Chrome выполняет обычное «If-Modified-Since», а Opera игнорирует ключ.

Если я правильно помню, это был Netscape, который был первым браузером, добавившим поддержку управления кэшем, добавив «Pragma: No-cache», когда вы нажимали CTRL - F5 .

Редактировать: Обновленная таблица

В приведенной ниже таблице обновлена ​​информация о том, что произойдет, когда будет нажата кнопка обновления браузера (после запроса Джоэль Коухорн ), и "max-age = 0" Cache-control- заголовок.

Обновленная таблица, 27 сентября 2010 г.

┌────────────┬───────────────────────────────────────────────┐
│  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│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Проверенные версии:

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

Примечания:

  1. Версия 3.0.6 отправляет I и C, но 3.1.6 открывает страницу в новой вкладке, сделать нормальный запрос только с "I".

  2. Версия 10.62 ничего не делает. 9.61 может сделать C, если это не опечатка в моей старой таблице.

Примечание о Chrome 6.0.472 : если вы выполняете принудительную перезагрузку (например, CTRL - F5 ), она ведет себя так, что URL-адрес внутренне помечен для всегда сделать принудительную перезагрузку. Флаг сбрасывается, если вы идете в адресную строку и нажимаете ввод.

295 голосов
/ 22 декабря 2008

Вообще говоря:

F5 может выдать вам ту же страницу, даже если содержимое изменилось, поскольку она может загрузить страницу из кэша. Но Ctrl - F5 принудительно обновляет кэш и гарантирует, что при изменении содержимого вы получите новый контент.

68 голосов
/ 12 марта 2012

Я реализовал кроссбраузерно-совместимую страницу для проверки поведения обновления браузера (здесь исходный код ) и получения результатов, аналогичных @some, но для современных браузеров:

enter image description here

9 голосов
/ 22 июля 2009

По крайней мере в Firefox (v3.5), кеш, кажется, отключен , а не просто очищен. Если на странице несколько экземпляров одного и того же изображения, оно будет передано несколько раз. Это также относится к тегам img, которые впоследствии добавляются через Ajax / JavaScript.

Так что, если вам интересно, почему браузер продолжает загружать один и тот же маленький значок несколько сотен раз на ваш сайт Ajax с автообновлением, это потому, что вы изначально загрузили страницу, используя CTRL - F5 .

3 голосов
/ 12 октября 2011

IE7 / 8/9, кажется, ведут себя по-разному в зависимости от того, на какой странице находится фокус или нет.

Если щелкнуть страницу и CTRL + F5 , то в заголовки запроса включается «Cache-Control: no-cache». Если вы щелкнете в строке местоположения / адреса, а затем нажмите CTRL + F5 , это не так.

1 голос
/ 06 марта 2009

Когда пользователь нажимает F5 , хотя новый запрос отправляется на веб-сервер и также получает ответ на запрос. Но когда заголовок ответа анализируется, он проверяет необходимую информацию в кэше браузера. Если требуемая информация в кеше не истекла, то эта информация восстанавливается из самого кеша.

Когда пользователь нажимает CTRL - F5 , даже тогда новый запрос отправляется на веб-сервер и получает ответ. Но в этот раз, когда заголовок ответа анализируется, он не проверяет необходимую информацию в кэше и выводит только обновленную информацию только на сервер формы.

...