Как с помощью Apache httpd отключить кэширование для данного UserAgent?
-
09-09-2019 - |
Вопрос
У меня настроен 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.
Я могу найти примеры конфигурации для нескольких вещей на основе пользовательского агента, но не могу понять, как настроить кеширование в зависимости от пользовательского агента.
Решение
Твой 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