Хотя утверждение w3d о том, что и F5, и enter будут использовать кеш, технически в основном верно, оно вводит в заблуждение. Дьявол кроется в деталях.
При нажатии клавиши ввода браузер может загружать любые ресурсы из кэша, не перепроверяя их в зависимости от срока действия (заголовок http Expires
) и других заголовков http. Это означает, что большинство ресурсов могут быть загружены так же быстро, как диск или ОЗУ, могут реагировать, возможно, менее чем за 1 мс, если ресурс находится в ОЗУ.
С другой стороны, нажатие клавиши F5 всегда отправляет запрос на сервер с заголовком запроса If-Modified-Since
с отметкой времени текущей кэшированной версии ресурса. Затем сервер либо ответит кодом состояния 200 OK
за которым следуют данные, либо кодом состояния 304 Not Modified
. Для статического ресурса это, скорее всего, будет статус 304
и браузер загрузит ресурс из кеша. Другими словами, браузер не может загружать ресурс из кеша, пока не получит ответ от сервера. Таким образом, при нажатии клавиши F5, даже если ресурс может быть не полностью передан повторно, время загрузки ресурса по-прежнему зависит от задержки в сети и времени ответа сервера. Это может занять 50-100 мс или более на ресурс.
Такое поведение можно наблюдать с помощью сетевой функции встроенных в браузер инструментов разработки. Вы можете открыть инструменты разработки самостоятельно, нажав control+shift+I, выбрав сеть и наблюдая за тем, что происходит, когда вы перезагружаете страницу различными способами. В Chrome вы увидите, что при нажатии Enter ресурсы, загруженные непосредственно из кеша, будут иметь статус 200 OK
и размер (from cache)
. В Firefox ресурсы, загруженные непосредственно из кэша, даже не отображаются в представлении сети. При нажатии F5, с другой стороны, запросы отправляются на сервер для всех ресурсов, которые в основном будут отвечать со статусом 304
.