Con servidor web Apache, cómo configuro sin almacenamiento en caché para un agente de usuario dado?
-
09-09-2019 - |
Pregunta
Tengo Apache HTTPD configurado para añadir una cabecera caché a las solicitudes de contenido más estática:
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"
¿Cómo puedo desactivar la caché para cualquier solicitud donde el UserAgent
contiene el JNLP cuerda? Cuando la solicitud proviene del agente de usuario JNLP (por ejemplo, "User-Agent: JNLP/6.0 javaws/1.6.0_12 (b04) Java/1.6.0_12
") no quiero cualquier Cache-Control
u otras cabeceras relacionadas con caché en la respuesta HTTP.
No puedo encontrar ejemplos de configuración para varias funciones, según el agente de usuario, pero no puedo encontrar la manera de configurar el almacenamiento en caché en función del agente de usuario.
Solución
Su directiva ExpiresByType
parece una buena idea ... si eso no es suficiente, entonces trate de usar BrowserMatch
:
BrowserMatch JNLP ua_is_jnlp
Esto establece la variable de entorno ua_is_jnlp
a algún valor para cualquier solicitud cuyo usuario agente de cabecera contiene el JNLP
cadena (también hay una variante de mayúsculas y minúsculas, BrowserMatchNoCase
). A continuación, puede borrar cualquiera de las cabeceras de caché con
Header unset Cache-Control env=ua_in_jnlp
Header unset Expires env=ua_in_jnlp
A pesar de que si se quiere deshabilitar el caché del todo, que sería mejor establecer
Header set Cache-Control no-cache env=ua_in_jnlp
Header set Expires 0 env=ua_in_jnlp