Какие запросы вызывают обновления браузеров "F5" и "Ctrl + F5"?

Есть ли стандарт для каких действий 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.

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

Ответ 1

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

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

Ответ 2

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

Я тестировал 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.

Изменить: Обновленная таблица

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

Обновленная таблица, 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)

Примечания:

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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