J'essaie d'avoir un comportement de base concernant ma stratégie de mise en cache: les fichiers doivent être mis en cache et revalidés avec le serveur à chaque fois. Je voudrais donc qu'Apache envoie un 304.
Voici la boîte de dialogue qui se produit pour chaque actualisation du navigateur:
Status Code:200 OK
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie: ...
Host:...
If-Modified-Since:Tue, 14 Oct 2014 15:10:37 GMT
If-None-Match:"1461-505636af08fcd-gzip"
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Response Headers
Accept-Ranges:bytes
Cache-Control:No-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1412
Content-Type:text/html
Date:Tue, 14 Oct 2014 16:58:05 GMT
ETag:"1461-505636af08fcd-gzip"
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 14 Oct 2014 15:10:37 GMT
Server:Apache/2.4.6 (Ubuntu)
Vary:Accept-Encoding
(ceci provient de chrome devtools, avec Disable cache unchecked)
Vous pouvez voir que la réponse contient le Cache-Control: No-cache Header et que l'en-tête If-modified-since correspond au Last-modified. L'ETag correspond également.
Apache ne devrait-il pas envoyer un 304 dans ce cas?
ÉDITER
Désactiver ETags dans Apache avec
Header unset ETag
rend le comportement de mise en cache plus prévisible ...
Cache-Control:max-age=0
le cache a été désactivé, vous voyez donc laCache-Control:No-cache
réponse.Réponses:
Cela semble être un vieux bug , expliquant pourquoi cela
Header unset ETag
fait une différence.Apache 2.4.0+ ajoute automatiquement le nom de la méthode de compression à l'ETag (comme vu dans vos en-têtes) et empêche une réponse 304.
Les dernières versions de mod_deflate prennent en charge un DeflateAlterETag qui peut être utilisé pour contrôler ce comportement:
la source
DeflateAlterETag Remove
option pour faire exactement celaCelui-ci se démarque dans la demande comme étant un peu étrange:
Probablement plus important cependant, je remarque que le contenu renvoyé est html. Est-il généré dynamiquement? Apache PEUT envoyer une réponse 304, mais à moins que vous ne fournissiez du contenu statique, ce n'est pas le travail d'Apache de faire cet appel, et cela se résume à la logique de votre application. Par exemple, la plupart des applications php ont un support limité pour de telles choses.
Un cache frontal peut être utile, car l'application de mise en cache peut vérifier l'heure de modification, etag, etc., mais uniquement si l'application et les en-têtes de demande sont compatibles avec le cache. Par exemple, l'application doit définir des en-têtes appropriés pour indiquer que le contenu peut être mis en cache, et des éléments comme l'en-tête de contrôle du cache dans votre demande annuleront le cache. Vos en-têtes ne semblent pas compatibles avec le cache.
la source
Si Apache est configuré avec
Cache-Control:No-cache
, Apache n'enverra jamais de messageHTTP 304 Not modified
au client.Si vous souhaitez revalider certaines demandes, mettez un
Cache-Control:No-cache
uniquement sur les pages où vous en avez besoin. Vous n'avez pas besoin de revalider toutes les ressources et vous gaspillez de la bande passante en le faisant.la source