Какие запросы генерируются браузерами при обновлении "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.

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

FWIW: хотя это, безусловно, тема мог для суперпользователей, и, возможно, даже была задумана как несколько ориентированная на конечного пользователя, когда первоначально был задан вопрос, на данный момент на нее и ответили, и на нее сослались программисты и веб-разработчики, и, вероятно, ее следует оставить здесь . У SU уже есть несколько других, более ориентированных на конечного пользователя версий этого, и они не нуждаются в этом ...

Shog9 20.08.2010 04:07
xkcd.com/1854
sudo bangbang 17.08.2018 07:37

Я могу быть сумасшедшим, но я думаю, что ALT+F5 делает то же самое, что и CTRL+F5.

ashleedawg 16.11.2020 08:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
402
3
585 265
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

Это верно, но обратите внимание, что хотя Ctrl + F5 заставит браузер выбросить кеш и запросить новый с сервера, сервер может игнорировать заголовок без кеширования и обслуживать кешированную страницу на стороне сервера. Таким образом, даже Ctrl + F5 может вернуть старую версию страницы, если сервер игнорирует заголовок без кеширования.

AaronLS 24.08.2012 00:47

F5 обновит страницу - CTRL + F5 выполнит «жесткое» обновление.

Dimitri Dewaele 05.02.2015 16:16

Также отметьте, что Ctrl-F5 отправит форму, если таковая имеется.

jawo 20.08.2015 13:53

Итак, если вы нажмете ctrl + f5, вы скажете своему браузеру не использовать кеш, но что происходит при последующих запросах к той же странице? Я имею в виду, можете ли вы увидеть более старые версии страницы после того, как просмотрели самую старую? Если я вижу версию 1 страницы, потому что она кэширована, но уже доступна версия 2, я понимаю, что нажатие ctrl + f5 заставит меня увидеть версию 2. Затем я закрываю браузер и снова открываю эту страницу, увижу ли я версию 1 или все еще вижу версию 2? Спасибо.

molerus 18.01.2017 10:50

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

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

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

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

Обновленная таблица, 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 открывает страницу в новой вкладке, сделать нормальный запрос только с «я».

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

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

Есть ли шанс добавить в эту таблицу SHIFT-ClickRefreshButton?

Joel Coehoorn 20.02.2009 18:37

BTW: Очень хорошая работа по цветовой кодировке такой клавиши.

Joel Coehoorn 20.02.2009 18:38

@Joel Coehoorn: Обновил таблицу, нажав кнопку обновления. Должен полюбить графические таблицы ASCII, не так ли? Цветовое кодирование было лишь побочным эффектом цветового кодирования.

some 20.02.2009 21:11

Разве вы не можете сделать это как правильную таблицу HTML?

John Topley 20.02.2009 21:32

FYI - этот ответ фактически упоминался на досках разработки / отслеживания ошибок Chrome: code.google.com/p/chromium/issues/detail?id=1906

Kip 29.01.2010 22:28

@Kyle: Спасибо, что исправили мою орфографию. @Kip: Большое спасибо за информацию об отслеживании ошибок в Chrome. Это сделало мой день!

some 24.09.2010 18:50

@John Topley: Таблицы не разрешены, поэтому ответ отрицательный.

some 04.10.2010 03:41

Отличная работа над этим столом - это относится к quirksmode. +1. Интересно, есть ли различия в том, какие заголовки используются для запроса ресурсов на обновленной странице, таких как изображения, таблицы стилей и т. д.

James Hart 20.05.2011 18:54

@ Джеймс Харт: Спасибо! Это результат, который я получил после тестирования с html-документом с внешним скриптом, css и изображением: для FF (4.0.1@win32) и MSIE (8.0.6001.18702@win32) это тот же тип запроса. Chrome (11.0.696.68@win32) также делает то же самое, но при принудительной перезагрузке (CTRL-F5) он ведет себя как установленный внутренний флаг, и если вы снова нажмете F5, HTML-документ будет извлечен с помощью MP, а все остальные - с помощью IM. См. Примечание выше в ответе. Opera (11.01 1190 @ win32) делает C для HTML-документа и I для включенных ресурсов.

some 20.05.2011 22:53

Я считаю, что Chrome обновил свое поведение смены-обновления примерно 11 или 12 лет. Можем ли мы получить обновление? Спасибо!

Paul Irish 04.08.2011 23:01

@ Пол Айриш: Я проверю, изменили ли они его через несколько дней. Кстати, вы заметили примечание о Chrome 6?

some 05.08.2011 19:57

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

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

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

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

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

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

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

Ссылки на вашей странице не работают, я исправил ссылку в ответе, но многие ссылки с этой страницы не работают. podlipensky.com/examples/refreshbutton/index.html, podlipensky.com/post/2012/02/27/…

Juan Mendes 20.06.2012 03:25

Извините, но я занимаюсь переносом блога. Ссылки будут исправлены как можно скорее - перейдите в репозиторий github и загрузите примеры.

Pavel Podlipensky 21.06.2012 03:21

Ссылки все еще не работают. Миграция не завершена?

bernardn 29.01.2015 14:25

Не могли бы вы обновить свой ответ с помощью текущей версии браузеров, особенно Safari для мобильных и настольных компьютеров, @PavelPodlipensky?

Greg Dubicki 20.08.2015 18:07

Другие вопросы по теме