вопросы об истечении срока действия заголовка - PullRequest
3 голосов
/ 02 мая 2011
  1. если в ответе не указан http-заголовок expires, что это значит для браузеров?
  2. В Glassfish v3, как настроить заголовок expires для статических ресурсов, которые были развернуты в docroot, а не как файл war?
  3. Я заметил, что Glassfish, похоже, устанавливает заголовок ETag по умолчанию. Это правда? Конечная цель, которую я хочу достичь, - установить заголовок с истекшим сроком на будущее, но при этом иметь возможность сообщать браузерам «что нового есть» при развертывании новой версии файлов изображений css, js, image.

Большое спасибо за любые советы.

Ответы [ 5 ]

5 голосов
/ 30 мая 2011

Считайте http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx для фона.

  1. Если вы не укажете свежесть, некоторые браузеры будут проверять каждый раз. Некоторые будут проверять один раз за сеанс. Большинство браузеров последней версии будут пытаться вычислить эвристическое истечение 10% времени с даты последнего изменения, если оно предоставлено. Если нет, они будут проверять каждый раз или один раз за сеанс.
  2. Понятия не имею.
  3. Это не то, как истекает срок действия HTTP - браузер волшебным образом не «узнает», что на сервере появился новый контент (как это могло быть?). Если вы хотите изменить содержимое, которое кэшируется на клиенте, вам необходимо изменить URL-адреса, чтобы игнорировать старый кэшированный контент.
2 голосов
/ 06 июня 2011

Для expires не предусмотрено в заголовке ответа сервера, см. §14.21 здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Даже если указано, expires переопределяется директивой max-age, поэтому, если expires не указано, используется max-age. Если ничего не предоставлено, см. §13.2.4 здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.4 По сути, он говорит, что клиент может устанавливать кэш на неопределенный период времени, и не всегда.

Чтобы решить вашу проблему , вы можете сказать, что ваши статические элементы никогда не истекают, и добавить время истечения для включенных элементов HTML-документа. Для этого смотрите здесь: http://www.tipsandtricks -hq.com / как к надстройку далеко в будущее истекает-Headers-на-ваш-WordPress-сайт-1533

Цитируется: "Чтобы добавить заголовок expires к изображению, CSS, javascript-файлы добавьте следующее в ваш .htaccess файл

Expire Header

> <FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
> ExpiresDefault "access plus 2 hours"
> </FilesMatch>

или Expire image header

> ExpiresActive On 
> ExpiresDefault A0
> ExpiresByType image/gif A2592000

[...] Имейте в виду, что при использовании заголовка expires файлы кэшируются в браузере до истечения срока его действия, поэтому не используйте его в файлах, которые часто изменяются. Если вы измените / обновите файл, срок действия которого истекает в будущем (например, файлы CSS или javascript), вам следует переименовать этот файл и использовать переименованную версию, чтобы браузер не извлекал старый файл. "

1 голос
/ 30 мая 2011

Что касается вашего второго вопроса, я нахожу этот ресурс интересным:

http://blogs.oracle.com/cwebster/entry/caching_static_resources_in_glassfish

Представленное решение не просто конфигурирует, а требует, чтобы фильтр был реализован и использован.

0 голосов
/ 06 июня 2011

Это не полный ответ, но легче отформатировать вывод в ответе, чем в комментарии.

  1. Если нет заголовка «expires» и других заголовков кэширования, браузер не должен кэшировать содержание. Однако, если у вас есть, например, заголовок Last-Modified, браузеру не нужен заголовок expires для кэширования содержимого и определения его срока действия.
  2. не знаю
  3. expires Заголовок не требуется для кэширования страницы, и он фактически предназначен для динамического содержимого , когда вы знаете возможную дату истечения срока действия (например, если это ежедневный график). Есть много способов истечения срока действия документа. Например, если заголовок документа Last-Modified указан и правильный, а длина содержимого известна, браузеры могут кэшировать страницу и в следующий раз могут использовать заголовок If-Modified-Since, что приведет к 304 Not Modified, поэтому браузер сможет показывать кэшированное содержимое. Так что если Last-Modified есть, не беспокойтесь - браузер всегда будет показывать свежую версию (за редким исключением)
0 голосов
/ 06 июня 2011

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

Что касается вопроса 3, вы можете добавить строку запроса, которая является либо номером версии, либо датой последнего изменения (если ваша таблица стилей или javascript меняются более одного раза в день, вы не используете тестирование или подготовку должным образом), либо текущая контрольная сумма файла. Например, вместо site.css вы можете использовать

<link rel="stylesheet" href="site.css?lastmodified=20110605">

или

<link rel="stylesheet"
  href="site.css?sha1sum=da39a3ee5e6b4b0d3255bfef95601890afd80709">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...