Chrome игнорирует Cache-Control: максимальный возраст?

Фон:

IIS 7 AspNet 3.5 web app

Chrome Dev Tools перечисляет 98 запросов на домашнюю страницу веб-приложения (aspx + js + css + images). В следующих запросах код состояния200 для файлов CSS / изображений. Информация о кеше отсутствует, браузер каждый раз спрашивает сервер, нужно ли обновлять файл. ХОРОШО.

В IIS 7 я установил HTTP-заголовок для управления кэшем, установив значение 6 часов для «ресурсов». папка. В Chrome, используя инструменты разработчика, я вижу, что заголовок хорошо настроен в ответ:

Cache-Control: max-age=21600

Но я все еще получаю 98 запросов ... Я думал, что браузер не должен запрашивать один ресурс, если срок его действия не достигнут, и я ожидал, что количество запросов будет отброшено ...

 Alex D21 нояб. 2012 г., 13:54
У меня похожая проблема. Chrome, похоже, полностью игнорирует заголовки кэширования.
 Pat Mächler31 июл. 2017 г., 11:01
Название этого вопроса неверно. Он должен быть «Cache-Control», а не «Control-Cache». ;)
 user333809827 янв. 2016 г., 21:02
Я использовал максимальный возраст 10 секунд для тестирования иnothing когда-либо работал, однако, если я делаю 30 секунд, то все работает, как ожидалось. Похоже, что Chrome имеет минимальное время кеширования, ниже которого он игнорируется.

Ответы на вопрос(6)

Chrome, кажется, игнорирует вашCache-Control настройки, если вы перезагружаетесь в той же вкладке. Если вы скопируете URL-адрес в новую вкладку и загрузите его там, Chrome будет учитывать теги управления кешем и повторно использовать содержимое из кеша.

В качестве примера у меня было это приложение Ruby Sinatra:

#!/usr/bin/env ruby

require 'sinatra'

before do
  content_type :txt
end

get '/' do
  headers "Cache-Control" => "public, must-revalidate, max-age=3600",
          "Expires" => Time.at(Time.now.to_i + (60 * 60)).to_s
  "This page rendered at #{Time.now}."
end

Когда я постоянно перезагружал его на той же вкладке Chrome, он отображал новое время.

This page rendered at 2014-10-08 13:36:46 -0400.
This page rendered at 2014-10-08 13:36:48 -0400.

Заголовки выглядели так:

< HTTP/1.1 200 OK
< Content-Type: text/plain;charset=utf-8
< Cache-Control: public, must-revalidate, max-age=3600
< Expires: 2014-10-08 13:36:46 -0400
< Content-Length: 48
< X-Content-Type-Options: nosniff
< Connection: keep-alive
* Server thin is not blacklisted
< Server: thin

Однако доступ к тому же URL,http://localhost:4567/ из нескольких новых вкладок перезапустит предыдущий результат из кэша.

 22 окт. 2014 г., 20:15
Это просто ответ, который мне был нужен. В течение часа мы боролись с Chrome, пытаясь найти правильную комбинацию заголовков Cache, и, наконец, нашли этот пост и bam, не нужно беспокоиться.

Еще один совет:

Не забудьте проверить «Дата» заголовок - если сервер имеет неправильную дату / время (или находится в другом часовом поясе) - Chrome будет снова и снова запрашивать ресурс.

 31 мар. 2017 г., 20:29
Имеет смысл проверять перекос часов сервера. Но да, сначала убедитесь, что все время UTC. Часовой пояс не должен быть проблемой.
 06 нояб. 2016 г., 11:39
Это бессмысленно. Когда человек из США заходит на сайт с другим часовым поясом, кэширование все еще работает.

Если инструменты разработчика Chrome открыты (F12), Chrome обычно отключает кэширование.

Это можно контролировать в настройках Developer Tools - значок Gear справа от верхней панели dev-tools.

 08 окт. 2014 г., 19:31
Я не проверял эту коробку, и она все еще не правильно кешировала. В этом окне указывается: «Отключить кэш (когда открыт DevTools)».

После выполнения некоторых тестов сCache-Control:max-age=xxx:

Pressing reload button: header ignored Entering same url any tab (current or not): honored Using JS (window.location.reload()): ignored Using Developer Tools (with Disable cache unselected) or incognito doesn't affect

Итак, лучший вариант при разработкеput the cursor in the omnibox and press enter вместо кнопки обновления.

Note: щелчок правой кнопкой мыши на значке обновления покажет параметры обновления (Обычный, Жесткий, Пустой кэш). Невероятно, но никто из них не влияет на эти заголовки.

 07 июн. 2018 г., 00:51
По состоянию на 06.06.2008 Chrome не соблюдает "неизменный" флаг, вы должны использовать & quot; max-age = xxx & quot; или его друзья.

Хотя этот вопрос старый, я хотел бы добавить, что если вы разрабатываете использование самозаверяющего сертификата по протоколу https и возникает проблема с сертификатом, то Google не будет кэшировать ответ независимо от того, какие заголовки кэша вы используете.

Это отмечено в этом сообщении об ошибке: https://bugs.chromium.org/p/chromium/issues/detail?id=110649

Решение Вопроса

Я понял. Google Chrome игнорируетCache-Control или жеExpires заголовок, если вы делаете запрос сразу же после другого запроса к тому же URI на той же вкладке (нажав кнопку обновления, нажавF5 ключ или нажатиеCommand + R). Вероятно, у него есть алгоритм, позволяющий угадать, что пользователь действительно хочет сделать.

Способ проверитьCache-Control Заголовок должен вернуть HTML-документ со ссылкой на себя. При нажатии на ссылку Chrome подает документ из кэша. Например, назовите следующий документself.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Page</title>
</head>
<body>
    <p>
        <a href="self.html">Link to the same page.</a>
        If correctly cached, a request should not be made
        when clicking the link.
    </p>
</body>
</html>

Другой вариант - скопировать URL-адрес и вставить его в ту же вкладку или другую вкладку.

UPDATE: НаСообщение Chrome опубликовано 26 января 2017 г.описывается, каково было предыдущее поведение и как оно изменяется, выполняя только повторную проверкуmain resource, но не изsub-resources:

Users typically reload either because a page is broken or the content seems stale. The existing reload behavior usually solves broken pages, but stale content is inefficiently addressed by a regular reload, especially on mobile. This feature was originally designed in times when broken pages were quite common, so it was reasonable to address both use cases at once. However, this original concern has now become far less relevant as the quality of web pages has increased. To improve the stale content use case, Chrome now has a simplified reload behavior to only validate the main resource and continue with a regular page load. This new behavior maximizes the reuse of cached resources and results in lower latency, power consumption, and data usage.

ВПост в Facebook также опубликован 26 января 2017 г.упоминается, что они нашликусок кода были ли Chrome аннулирует все кэшированные ресурсы после запроса POST:

we found that Chrome would revalidate all resources on pages that were loaded from making a POST request. The Chrome team told us the rationale for this was that POST requests tend to be pages that make a change — like making a purchase or sending an email — and that the user would want to have the most up-to-date page.

Кажется, это больше не так.

Наконец, описано, что Firefox представляетCache-Control: immutable полностью прекратить повторную проверку ресурсов:

Firefox implemented a proposal from one of our engineers to add a new cache-control header for some resources in order to tell the browser that this resource should never be revalidated. The idea behind this header is that it's an extra promise from the developer to the browser that this resource will never change during its max-age lifetime. Firefox chose to implement this directive in the form of a cache-control: immutable header.

Я надеюсь, что это помогает распутать тайны перезагрузки.

 30 нояб. 2015 г., 21:21
Chrome загружается только из кэша в режиме инкогнито, но не из другого, что крайне странно!
 10 июн. 2014 г., 23:37
Разве это не цель кеширования?
 28 мар. 2016 г., 03:07
F5 или жеCtrl-R команда перезагрузки, которая просит браузер сбросить кэши ... Она не относится к Chrome. ТакжеCache-Control: no-cache заголовок отправляется на сервер, если сервер хотел принять это во внимание ... (это важно для прокси, которые могут кэшировать вашу страницу.)
 03 мар. 2015 г., 18:05
Более простой способ проверить это - скопировать ваш URL в новую вкладку :)
 01 нояб. 2016 г., 16:10
@AlexisWilke F5 не должен очищать кэши, в Win / Linux вы должны нажать F5 + Ctrl, чтобы обновить страницу + очистить кэши (см .:en.wikipedia.org/wiki/Wikipedia:Bypass_your_cache)

Ваш ответ на вопрос