Как долго Google Chrome кэширует ресурс, если не истек срок действия и / или заголовки без кэширования не установлены? - PullRequest
38 голосов
/ 16 марта 2012

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

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

Собственный сайт Google сообщает следующее:

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

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

Ответы [ 2 ]

11 голосов
/ 16 марта 2012

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

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

8 голосов
/ 26 августа 2016

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...