Подтвердить что ты не робот

Как долго Google Chrome кэширует ресурс, если он истекает, и/или заголовки без кеша не установлены?

У нас возникла проблема с кешированием Chrome ресурсом на нашем сервере Glassfish. Заголовки expires и no-cache не отправляются, а ресурс (примерно 4 МБ SWF файла) кэшируется Chrome - несмотря на наличие заголовка Last-Modified.

Иногда Chrome получает код 304, а в других случаях он просто выполняет 200 (из кеша). Я понимаю, что 304 - Chrome, скорее всего, проверит самую последнюю дату последней модификации с помощью кэшированной версии. Но иногда он делает 200 (из кеша), который не возвращает никакой информации заголовка, и появляется, что Chrome просто предполагает, что файл не был изменен вместо проверки.

Пользовательский сайт Google:

HTTP/S поддерживает локальное кэширование статических ресурсов браузером. Некоторые из новейших браузеров (например, IE 7, Chrome) используют эвристику для принятия решения как долго кэшировать все ресурсы, которые не имеют явного кэширования заголовки.

Но это не дает окончательного ответа. Эгуристическая публикация опубликована где угодно? Я понимаю, что не может быть фиксированного ответа (например, 30 дней), но некоторые общие рекомендации были бы полезными. Кроме того, если параметр Last-Modified установлен, я не понимаю, почему Chrome не пытается проверить это в первую очередь.

4b9b3361

Ответ 1

DEFAULT_CACHE_TIME = 300

Я нашел это, выполнив поиск http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk для "DEFAULT_CACHE_TIME".

Там есть файл с названием "chromeextensionsdocs.py", который содержит DEFAULT_CACHE_TIME.

I верить, это секунды, основанные на примере, приведенном в http://code.google.com/appengine/docs/python/memcache/overview.html
В "chromeextensionsdocs.py" DEFAULT_CACHE_TIME отправляется последним параметром в memcache.add

Я не совсем уверен, что это правильное значение или нет, но кажется вероятным, что это происходит при объединении кусочков.

Ответ 2

Время, в течение которого браузер считает, что кешированный ответ свежий, обычно относится к тому, когда он был последним изменен:

Поскольку исходные серверы не всегда предоставляют явное время истечения срока действия, кеш МОЖЕТ назначать эвристическое время истечения, когда явное время не указано, используя алгоритмы, которые используют другие значения полей заголовка (например, время последнего изменения)... Если в ответе есть поле заголовка Last-Modified (раздел 2.2 [RFC7232]), кешам рекомендуется использовать эвристическое значение срока действия, которое составляет не более чем часть интервала с этого времени. Типичная настройка этой фракции может составлять 10%. [https://tools.ietf.org/html/rfc7234#section-4.2.2]

Сведения о том, как вычислить это значение в Chrome (и других браузерах), можно найти в исходном коде (Пример из Chrome v49). Похоже, что Chrome также вычисляет значение относительно заголовка Last-Modified.

(Кредит на этот пост)