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;
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.
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.