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

394

Существует ли стандарт для каких действий 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шапку.

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

Морган Ченг
источник
10
FWIW: хотя это, безусловно, может быть темой для суперпользователя , и, возможно, даже изначально задумывалось как ориентированное на конечного пользователя, на данный момент на него уже отвечали и на него ссылались программисты и веб-разработчики, и, вероятно, его следует оставить здесь , У SU уже есть несколько других, более ориентированных на конечного пользователя версий этого, и они не нужны ...
Shog9
2
xkcd.com/1854
sudo bangbang

Ответы:

313

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

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

dancavallaro
источник
86
Это верно, но учтите, что хотя Ctrl + F5 заставит браузер выбросить кеш и запросить новый у сервера, сервер может игнорировать заголовок no-cache и обслуживать кэшированную страницу на стороне сервера. Таким образом, даже Ctrl + F5 может вернуть старую версию страницы, если сервер игнорирует заголовок no-cache.
AaronLS
F5 обновит страницу - CTRL + F5 выполнит «жесткое» обновление.
Димитрий Деваэле
Также отметим, что Ctrl-F5 отправит форму, если она задана.
Джаво
Итак, если вы нажмете Ctrl + F5, вы скажете браузеру не использовать его кеш, но что произойдет в последующих запросах к той же странице? Я имею в виду, вы можете увидеть старые версии страницы после того, как вы увидели самую старую? Если я вижу версию 1 страницы, потому что она кешируется, но уже есть версия 2, я понимаю, что нажатие Ctrl + F5 заставит меня увидеть версию 2. Затем я закрываю свой браузер и снова открываю эту страницу: я вижу версию 1 или я все еще вижу версию 2? Спасибо.
Molerus
525

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

Я тестировал 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-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)
  • Опера 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-адрес был внутренне помечен, чтобы всегда выполнять принудительную перезагрузку. Флаг сбрасывается, если вы идете в адресную строку и нажимаете ввод.

несколько
источник
5
@Joel Coehoorn: обновил таблицу, нажав на кнопку обновления. Нужно любить графические таблицы ASCII, не так ли? Цветовая кодировка была лишь побочным эффектом кодовой цветовой кодировки.
некоторые
11
Разве вы не можете сделать это как правильную таблицу HTML?
Джон Топли
13
FYI - это ответ на самом деле была ссылка на трековых доски развития хром / ошибка: code.google.com/p/chromium/issues/detail?id=1906
Кип
18
@ Джон Топли: Таблицы не разрешены, поэтому ответ - нет.
некоторые
1
Отличная работа на этом столе - это относится к причудливому режиму. +1. Интересно, существуют ли различия в том, какие заголовки используются для запроса ресурсов на обновленной странице, таких как изображения, таблицы стилей и т. Д.
Джеймс Харт
68

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

введите описание изображения здесь

Павел Подлипенский
источник
Ссылки на вашей странице не работают, я исправил ссылку в ответе, но многие ссылки с этой страницы не работают. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Хуан Мендес
Извините, об этом - занимаюсь миграцией блогов. Ссылки будут исправлены КАК МОЖНО СКОРЕЕ, пока - перейдите в репозиторий github и загрузите примеры.
Павел Подлипенский
Ссылки все еще битые. Миграция не закончена?
Бернардн
Не могли бы вы обновить свой ответ текущей версией браузеров, особенно Safari для мобильных и настольных компьютеров, @PavelPodlipensky?
Грег Дубицки
9

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

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

mermshaus
источник
3

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

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

Фил Хаселден
источник
1

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

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

naXa
источник