Mise à jour automatique du cache #129

Closed
opened 2023-06-07 10:29:12 +02:00 by Darks · 7 comments
Owner

Lorsque les ressources statiques (scripts, css) sont modifiées, il faut que chaque client force le rafraichissement du cache de son navigateur.

Une solution simple est d'ajouter un paramètre GET quelconque qui va indiquer aux navigateurs que la ressource a changé. On peut utiliser un timestamp unix, une date ou autre.

Exemple : <link rel="stylesheet" type="text/css" href="/static/css/base.css?t=1686125654">

C'est pas très compliqué à implémenter : https://v5.planet-casio.com/forum/actus/projets/2/fin/avancees-de-la-v5#6845

Les fichiers concernés sont :

  • app/utils/render.py
  • app/templates/base/head.html
  • app/templates/base/scripts.html
Lorsque les ressources statiques (scripts, css) sont modifiées, il faut que chaque client force le rafraichissement du cache de son navigateur. Une solution simple est d'ajouter un paramètre GET quelconque qui va indiquer aux navigateurs que la ressource a changé. On peut utiliser un timestamp unix, une date ou autre. Exemple : `<link rel="stylesheet" type="text/css" href="/static/css/base.css?t=1686125654">` C'est pas très compliqué à implémenter : https://v5.planet-casio.com/forum/actus/projets/2/fin/avancees-de-la-v5#6845 Les fichiers concernés sont : - app/utils/render.py - app/templates/base/head.html - app/templates/base/scripts.html
Owner

IIRC l'ajout d'un paramètre GET interfère avec le cache, ie. il y a un risque que le navigateur fasse la requête à chaque fois

IIRC l'ajout d'un paramètre GET interfère avec le cache, ie. il y a un risque que le navigateur fasse la requête _à chaque fois_
Member

C’est pas précisément ce à quoi sert le header ETag ?

C’est pas précisément ce à quoi sert le header ETag ?
Owner

Si, effectivement ! Je ne connaissais pas. Il y a quelques extensions pour Flask (eg. wim-vdw/flask-etag donc ça ne doit pas être nativement supporté, mais je ne doute pas que ça doit être facile à gérer puisqu'on peut ajouter un header manuellement aux réponses pour les fichiers en question.

Si, effectivement ! Je ne connaissais pas. Il y a quelques extensions pour Flask (eg. [wim-vdw/flask-etag](https://github.com/wim-vdw/flask-etag) donc ça ne doit pas être nativement supporté, mais je ne doute pas que ça doit être facile à gérer puisqu'on peut ajouter un header manuellement aux réponses pour les fichiers en question.
Member

C'est ça il faut juste ajouter le bon header, mais comme c'est nginx qui s'occupe de servir les fichiers statiques on devrai plutôt regarder comment le configurer lui.

C'est ça il faut juste ajouter le bon header, mais comme c'est nginx qui s'occupe de servir les fichiers statiques on devrai plutôt regarder comment le configurer lui.
Author
Owner
Bon bah suffisait de RTFM https://nginx.org/en/docs/http/ngx_http_core_module.html#etag
Author
Owner

À priori on a bien les header ETag d'activé (option par défaut de Nginx)

$ curl -v https://v5.planet-casio.com/static/css/global.css
< ETag: "647fa98e-ba5"
< Cache-Control: max-age=604800
< Cache-Control: public

Le problème c'est que c'est pas pris en compte coté serveur :

curl -v https://v5.planet-casio.com/static/css/global.css --header "If-None-Match:647fa98e-ba5"
< HTTP/1.1 200 OK  # Expected 304 NOT MODIFIED
< ETag: "647fa98e-ba5"
À priori on a bien les header ETag d'activé (option par défaut de Nginx) ``` $ curl -v https://v5.planet-casio.com/static/css/global.css < ETag: "647fa98e-ba5" < Cache-Control: max-age=604800 < Cache-Control: public ``` Le problème c'est que c'est pas pris en compte coté serveur : ``` curl -v https://v5.planet-casio.com/static/css/global.css --header "If-None-Match:647fa98e-ba5" < HTTP/1.1 200 OK # Expected 304 NOT MODIFIED < ETag: "647fa98e-ba5" ```
Author
Owner

C’est bien un problème de durée de validité du cache. Elle était à 7 jours. Pour la preprod je l’ai passée à 10 minutes.

Cf la config Nginx.

C’est bien un problème de durée de validité du cache. Elle était à 7 jours. Pour la preprod je l’ai passée à 10 minutes. Cf la config Nginx.
Darks closed this issue 2023-06-07 21:41:35 +02:00
Sign in to join this conversation.
No description provided.