Avec Apache httpd, comment puis-je configurer la mise en cache pas pour un UserAgent donné?
-
09-09-2019 - |
Question
J'ai Apache configuré pour ajouter un en-tête de cache aux demandes de contenu le plus statique:
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"
Comment puis-je désactiver cette mise en cache pour toute demande où le UserAgent
contient la chaîne JNLP? Lorsque la demande vient de l'agent utilisateur JNLP (par exemple "User-Agent: JNLP/6.0 javaws/1.6.0_12 (b04) Java/1.6.0_12
") Je ne veux pas any Cache-Control
ou autres en-têtes liées au cache sur la réponse HTTP.
Je peux trouver des exemples de configuration pour plusieurs choses basées sur l'agent utilisateur, mais je ne peux pas comprendre comment configurer la mise en cache en fonction de l'agent utilisateur.
La solution
Votre directive ExpiresByType
ressemble à une bonne idée ... si cela ne suffit pas, essayez d'utiliser BrowserMatch
:
BrowserMatch JNLP ua_is_jnlp
Ceci définit la variable d'environnement ua_is_jnlp
à une certaine valeur pour toute demande dont l'entête contient l'agent utilisateur la chaîne JNLP
(il y a aussi une variante insensible à la casse, BrowserMatchNoCase
). Ensuite, vous pouvez effacer les en-têtes de mise en cache avec
Header unset Cache-Control env=ua_in_jnlp
Header unset Expires env=ua_in_jnlp
bien que si vous souhaitez désactiver la mise en cache entièrement, vous feriez mieux de partir
Header set Cache-Control no-cache env=ua_in_jnlp
Header set Expires 0 env=ua_in_jnlp