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

Какое значение по умолчанию для контроля кеша?

Моя проблема: иногда браузер перехватывает некоторые ресурсы, даже если я уже их модифицировал. Но после F5 все в порядке.

Я изучил этот случай весь день. Теперь я полностью понял точку "Last-Modified" или "Cache-Control". И я знаю, как решить мою проблему (только версия .js? Или явная max-age = xxxx). Но проблема все еще не решена: как браузер обрабатывает заголовок ответа без "Cache-Control" следующим образом:

Content-Length: 49675
Content-Type: text/html
Last-Modified: Thu, 27 Dec 2012 03:03:50 GMT
Accept-Ranges: bytes
Etag: "0af7fcbdee3cd1:972"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 24 Jan 2013 07:46:16 GMT 

Они четко кэшируют их, когда "Enter in the bar"

enter image description here

4b9b3361

Ответ 1

RFC 7234 подробно описывает, что браузеры и прокси должны делать по умолчанию:

Хотя кэширование является полностью ДОПОЛНИТЕЛЬНОЙ функцией HTTP, можно предположить, что повторное использование кэшированного ответа желательно и что такое повторное использование является поведением по умолчанию, когда никакое требование или локальная конфигурация не препятствуют этому. Поэтому требования к HTTP-кэшу направлены на предотвращение хранения в кеше одноразового ответа или неправильного повторного использования сохраненного ответа, а не на обязательном хранении и повторном использовании определенных ответов в кэшах.

Ответ 2

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

Хотя кэширование является полностью ДОПОЛНИТЕЛЬНОЙ функцией HTTP, можно предположить, что повторное использование кэшированного ответа желательно и что такое повторное использование является поведением по умолчанию, когда никакое требование или локальная конфигурация не препятствуют этому. Поэтому требования к HTTP-кэшу направлены на предотвращение хранения в кеше одноразового ответа или неправильного повторного использования сохраненного ответа, а не на обязательном хранении и повторном использовании определенных ответов в кэшах. [ https://tools.ietf.org/html/rfc7234#section-2]

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

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

В этом посте подробно рассказывается, как разные браузеры рассчитывают это значение.

Ответ 3

Заголовок кэша управления по умолчанию: Частный

Механизм кэширования может кэшировать эту страницу в приватном кеше и повторно отправлять ее только одному клиенту. Это значение по умолчанию. Большинство прокси-серверов не будут кэшировать страницы с этим параметром.

См. http://msdn.microsoft.com/en-us/library/ms524721%28v=vs.90%29.aspx

Ответ 4

Время жизни свежести рассчитывается на основе нескольких заголовков. Если указан заголовок "Cache-control: max-age = N", то время жизни свежести равно N. Если этот заголовок отсутствует, что очень часто имеет место, проверяется, присутствует ли заголовок Expires. Если заголовок Expires существует, то его значение за вычетом значения заголовка Date определяет время существования свежести. Наконец, если заголовок отсутствует, ищите заголовок Last-Modified. Если этот заголовок присутствует, то время жизни обновления кэша равно значению заголовка Date минус значение заголовка Last-updated, деленное на 10.

Источник: https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#Freshness

Ответ 5

Без заголовка управления кэшем браузер запрашивает ресурс каждый раз, когда он загружает новую (?) страницу. Если вы нажмете F5, вы аннулируете (или даже логически удаляете) любой кешированный элемент на этой странице, заставляя полную перезагрузку, действуя, поскольку локальная версия недоступна. Я не уверен, что браузер удаляет эти ресурсы из кеша, прежде чем запрашивать их снова.

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

Следующим является то, что браузер повторно использует изображения, которые явно не заданы как nocache, применяя какое-то локальное "предпочтительное" кэширование. Если вы хотите получить запрос каждый раз, когда вам нужно настроить его на повторную проверку и установить срок действия до -1 или что-то в этом роде.

Таким образом, в зависимости от того, какой ресурс не указывает ничего, вы часто запускаете некоторые значения по умолчанию, которые не то же самое, что вы ожидаете от чтения спецификаций.

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

Что помогает проверить www.google.com и искать пиксели отслеживания своих запросов на страницу (два пикселя 1x1 запрошены с metrics.gstats.com со случайной частью на субдомене).

Если вы используете firebug для проверки заголовка, вы видите, что они указывают директивы nocache любым возможным способом. Заголовок читается следующим образом:

Alternate-Protocol  443:quic
Cache-Control   no-cache, must-revalidate
Content-Length  35
Content-Type    image/gif
Date    Mon, 25 Nov 2013 14:33:30 GMT
Expires Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified   Tue, 14 Aug 2012 10:47:46 GMT
Pragma  no-cache
Server  sffe
X-Content-Type-Options  nosniff
X-Firefox-Spdy  3
X-XSS-Protection    1; mode=block

Попробуйте это как параметр и проверьте, устраняет ли это проблему, что браузер не взял ваши измененные ресурсы. Директива must-revalidate заставит даже прокси-кеши запрашивать ресурс каждый раз и проверять ответы 304 Not Modified.

В настоящее время я испытываю нечто подобное. У меня есть подключение к локальному хосту etag, и все, что происходит, это то, что кеш никогда не спрашивает. Я не задавал кеширование информации или подобное. В одиночку указывая штыки etag, чтобы FireFox не запрашивал ресурс снова. Поэтому я испытываю нечто похожее на вашу проблему.

Ответ 6

В вашем случае у вас есть Etag: "0af7fcbdee3cd1:972" в заголовке ответа, поэтому он также кешируется.