web-dev-qa-db-fra.com

En-tête http si non modifié, aide

J'ai un peu de mal à trier mes en-têtes HTTP pour mes sites. Je suis en train de configurer Varnish sur mon serveur et j'essaie donc de tout faire fonctionner correctement.

Tous mes sites sont WordPress sauf un qui est Joomla si cela fait une différence.

La requête que j'ai est que je suis en train d'essayer de trier la mise en cache du navigateur avec des en-têtes HTTP. Certains des sites sont assez grands et je pense que cela aiderait à mettre en cache autant que possible. Je peux le faire avec max-age, cependant, je ne parviens pas à faire en sorte que le navigateur actualise le contenu une fois qu'il a été modifié, que ce soit en HTML ou en CSS.

Voici mes en-têtes de réponse du HTML:

Accept-Ranges: bytes
Age: 2
Cache-Control: max-age=3, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 6451
Content-Type: text/html; charset=UTF-8
Date: Tue, 02 Feb 2016 19:48:29 GMT
Expires: Tue, 02 Feb 2016 19:48:29 GMT
Last-Modified: Tue, 02 Feb 2016 19:48:13 GMT
Server: Apache
Vary: Accept-Encoding,Cookie
Via: 1.1 varnish
X-Cache: HIT
X-Varnish: 1571572700 1571572688

Évidemment, pour le moment, j'ai un maximum de 3 ans, ce qui n'est pas idéal, car après 3 secondes, Varnish enregistre un raté.

Voici l'en-tête de réponse pour le fichier CSS

Accept-Ranges: bytes
Age: 77
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 30070
Content-Type: text/css
Date: Tue, 02 Feb 2016 19:49:30 GMT
Expires: Thu, 03 Mar 2016 19:48:13 GMT
Last-Modified: Fri, 29 Jan 2016 12:59:15 GMT
Server: Apache
Vary: Accept-Encoding,User-Agent
Via: 1.1 varnish
X-Cache: HIT
X-Varnish: 1571572717 1571572659

Cela fonctionne quand on frappe Varnish, mais si je change la feuille de style, elle ne sera pas rafraîchie pendant 7 jours, ce qui est gênant si je dois modifier rapidement quelque chose.

Cette même règle s'applique si le maximum d'âge pour le code HTML n'est pas 3 mais quelque chose de mieux comme 1 jour.

Existe-t-il un moyen d’avoir une longue durée maximale pour ce qui précède, mais si le fichier CSS ou HTML sur les pages WordPress a été modifié, le résultat sera affiché à la place des fichiers périmés.

J'ai essayé pendant presque toute la journée de régler ce problème et, bien que cela puisse sembler être un simple tweak au fichier .htaccess, je n'arrive pas à le faire fonctionner correctement.

Tout conseil ou pointeur serait grandement apprécié.

Merci

2
WPDEVE

Pour les fichiers HTML, vous ne pouvez pas avoir les deux. Le seul moyen pour Varnish de toujours montrer les fichiers HTML s'ils ont changé est de vérifier chaque fois (= cache cache), point auquel vous n'avez rien gagné en l'utilisant. Si votre site change très fréquemment, il est probablement préférable de définir une durée de cache aussi courte que vous le souhaitez (bien que 3 secondes puissent être un peu trop courtes). Personnellement, je ne me soucie généralement pas de la mise en cache de fichiers HTML, sauf sur les sites à fort trafic.

Pour les actifs statiques tels que les feuilles de style, vous souhaitez idéalement que l'URL change lorsque le fichier est modifié. Le moyen le plus simple consiste à inclure le dernier horodatage modifié dans l'URL de la feuille de style. Je n'utilise pas Wordpress, mais je serais surpris que des plugins n'existent pas et que cela automatise cela pour vous. Ensuite, vous pouvez définir des valeurs max-age très élevées et le contenu sera toujours frais.

En outre, n'utilisez pas les deux en-têtes max-age et - expirez - restez-en à l'un ou l'autre.

1
Tim Fountain