Перезаписать заголовки кэша с помощью mod_expires - PullRequest
9 голосов
/ 28 октября 2011

Я хочу установить заголовки кэша, используя модуль mod_expires из apache. Моя конфигурация выглядит примерно так:

<LocationMatch ^/static >
    ExpiresDefault "access plus 1 years"
</LocationMatch>

Проблема в том, что файлы генерируются третьей системой, которую я не контролирую. Эти системы предоставляют файлы со следующими заголовками:

Date Mon, 24 Oct 2011 08:39:02 GMT
Cache-Control no-cache,no-store,must-revalidate
Pragma no-cache
Expires Thu, 01 Dec 1994 16:00:00 GMT

Эти заголовки делают невозможным установку заголовков кэша с помощью mod_expires. http://httpd.apache.org/docs/2.2/mod/mod_expires.html говорит нам, почему:

Если заголовок Expires уже является частью ответа, сгенерированного сервером, например, когда он генерируется сценарием CGI или прокси-сервером с исходного сервера, этот модуль не изменяет и не добавляет заголовок Expires или Cache-Control.

Есть ли какой-нибудь возможный способ обойти это правило и перезаписать заголовки с помощью mod_expires?

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

Спасибо, заранее.

Ответы [ 3 ]

4 голосов
/ 19 ноября 2012

К сожалению, это известное ограничение, и нам пришлось использовать только mod_headers.

1 голос
/ 18 ноября 2011

Предложение Regilero не сработает, потому что директивы заголовка будут обработаны очень поздно при обработке ответа - после директивы mod_expire.Таким образом, вы бы сбросили заголовки после того, как mod_expires сделал (или не сделал) то, что предполагалось сделать.

Если это apache 2.2, вы можете попробовать поставить early в конце каждой директивы заголовка.Это скажет ему сделать это на ранней стадии обработки ответа, а не в конце.

, поэтому попробуйте:

<LocationMatch ^/static >
  Header unset Cache-Control early
  Header unset Pragma early
  Header unset Expires early
  ExpiresDefault "access plus 1 years"
</LocationMatch>

Не проверял, но попробуйте...

0 голосов
/ 30 октября 2011

Вы пробовали смешивать его с mod_headers ?

<LocationMatch ^/static >
  Header unset Cache-Control 
  Header unset Pragma
  Header unset Expires 
  ExpiresDefault "access plus 1 years"
</LocationMatch>

Не проверено, но в случае ...

...