web-dev-qa-db-fra.com

Est-il sensé d'avoir max-age et s-maxage dans l'en-tête HTTP Cache-Control?

Considérant que max-age s'applique à tous les caches, et s-maxage ne s'applique qu'aux caches partagés (proxy et cache de passerelle) ....

Est-il judicieux d'utiliser les deux directives dans une page publique non expirable?

Pseudo-code du contrôleur:

w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");

return w;
27
unairoldan

De Définitions des champs d'en-tête HTTP :

14.9.3 Modifications du mécanisme d'expiration de base

...

s-maxage

Si une réponse inclut une directive s-maxage, alors pour un cache partagé (mais pas pour un cache privé), l'âge maximum spécifié par cette directive remplace l'âge maximal spécifié par la directive max-age ou l'en-tête Expires.

...

Remarque: " remplace ". Ainsi, cela n'aurait de sens que si vous avez l'intention de spécifier un âge maximum différent pour les caches partagés par rapport à max-age, qui serait utilisé par les utilisateurs finaux.

Dans votre exemple particulier, ce sont les mêmes, donc spécifiez s-maxage est tout simplement inutile.

27
BalusC

Le point clé à noter dans la définition est le cache de partage

De Définitions des champs d'en-tête HTTP

14.9.3 Modifications du mécanisme d'expiration de base

...

s-maxage

Si une réponse inclut une directive s-maxage, alors pour un cache partagé (mais pas pour un cache privé ), l'âge maximum spécifié par cette directive remplace l'âge maximum spécifié par la directive max-age ou l'en-tête Expires.

...

Cela signifie que le proxy inverse/les caches comme le vernis, cloudfront, cloudflare peuvent avoir un âge de cache différent du cache du navigateur. Je préférerais personnellement la valeur de s-maxage supérieur à maxage

Dans HTTP 1.1 une fois la réponse mise en cache, vous ne pouvez pas contacter le navigateur pour invalider le cache mais vous pouvez le dire aux CDN.

7
zainengineer