Перезаписать заголовки кэша с помощью mod_expires

Я хочу установить заголовки кэша, используя модуль 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 ответа

Решение

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

Предложение 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>

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

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

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

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

Другие вопросы по тегам