Как с помощью Apache httpd настроить отсутствие кэширования для данного UserAgent?

У меня есть Apache HTTPD, настроенный на добавление заголовка кеша к запросам на большинство статического контента:

ExpiresActive On
ExpiresDefault "access plus 1 year"

# Force JNLP and BSH files to expire immediately so updates are checked for
# and seen (We need this so we see changes in the dynamic content in both)
ExpiresByType application/x-java-jnlp-file "now"
ExpiresByType application/x-bsh "now"

Как я могу отключить это кэширование для любого запроса, где UserAgent содержит строку JNLP? Когда запрос поступает от пользовательского агента JNLP (например, «User-Agent: JNLP/6.0 javaws/1.6.0_12 (b04) Java/1.6.0_12»), я не хочу, чтобы какие-либо Cache-Control или другие заголовки, связанные с кешем, отображались в ответе HTTP.

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


person Eddie    schedule 27.02.2009    source источник


Ответы (1)


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

BrowserMatch JNLP ua_is_jnlp

Это устанавливает переменную среды ua_is_jnlp в некоторое значение для любого запроса, заголовок пользовательского агента которого содержит строку JNLP (есть также вариант без учета регистра, BrowserMatchNoCase). Затем вы можете очистить любые заголовки кэширования с помощью

Header unset Cache-Control env=ua_in_jnlp
Header unset Expires env=ua_in_jnlp

хотя, если вы хотите полностью отключить кеширование, вам лучше установить

Header set Cache-Control no-cache env=ua_in_jnlp
Header set Expires 0 env=ua_in_jnlp
person David Z    schedule 27.02.2009
comment
Спасибо. Это именно то, что я искал. Я понял это прямо перед вашим постом, но затем увидел ваш пост, поставил вам галочку за правильный ответ и удалил свой пост. - person Eddie; 28.02.2009