Aller au contenu principal

5.2.3. Extensions de Cache-Control (Cache Control Extensions)

Le champ d'en-tête Cache-Control peut être étendu par l'utilisation d'un ou plusieurs jetons d'extension de cache, chacun avec une valeur optionnelle. Un cache DOIT ignorer les directives de cache non reconnues.

Les extensions informationnelles (celles qui ne nécessitent pas de changement dans le comportement du cache) peuvent être ajoutées sans changer la sémantique des autres directives.

Les extensions comportementales sont conçues pour fonctionner en agissant comme des modificateurs de la base existante de directives de cache. La nouvelle directive et la directive standard sont toutes deux fournies, de sorte que les applications qui ne comprennent pas la nouvelle directive utiliseront par défaut le comportement spécifié par la directive standard, et celles qui comprennent la nouvelle directive la reconnaîtront comme modifiant les exigences associées à la directive standard. De cette manière, les extensions aux directives Cache-Control peuvent être faites sans casser les caches déployés.

Par exemple, considérons une nouvelle directive de réponse hypothétique appelée "community" qui agit comme un modificateur de la directive private : en plus des caches privés, tout cache qui est partagé uniquement par les membres de la communauté nommée est autorisé à mettre en cache la réponse. Un serveur d'origine souhaitant permettre à la communauté UCI d'utiliser une réponse autrement privée dans son ou ses caches partagés pourrait le faire en incluant :

Cache-Control: private, community="UCI"

Un cache qui reconnaît une telle extension de cache community pourrait élargir son comportement conformément à cette extension. Un cache qui ne reconnaît pas l'extension de cache community l'ignorerait et adhérerait à la directive private.

5.3. Expiration (Expires)

Le champ d'en-tête "Expires" donne la date/heure après laquelle la réponse est considérée comme périmée. Voir Section 4.2 pour une discussion plus approfondie du modèle de fraîcheur.

La présence d'un champ Expires n'implique pas que la ressource d'origine changera ou cessera d'exister à, avant ou après ce moment.

La valeur du champ Expires est un horodatage HTTP-date, tel que défini dans la Section 7.1.1.1 de [RFC7231].

Expires = HTTP-date

Par exemple :

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Un destinataire de cache DOIT interpréter les formats de date invalides, en particulier la valeur "0", comme représentant un moment dans le passé (c'est-à-dire, "déjà expiré").

Si une réponse inclut un champ Cache-Control avec la directive max-age (Section 5.2.2.8), un destinataire DOIT ignorer le champ Expires. De même, si une réponse inclut la directive s-maxage (Section 5.2.2.9), un destinataire de cache partagé DOIT ignorer le champ Expires. Dans ces deux cas, la valeur dans Expires est uniquement destinée aux destinataires qui n'ont pas encore implémenté le champ Cache-Control.

Un serveur d'origine sans horloge NE DOIT PAS générer un champ Expires à moins que sa valeur ne représente un moment fixe dans le passé (toujours expiré) ou que sa valeur n'ait été associée à la ressource par un autre système ou une personne disposant d'une horloge fiable.

Historiquement, HTTP exigeait que la valeur du champ Expires ne soit pas supérieure à un an dans le futur. Bien que des durées de fraîcheur plus longues ne soient plus interdites, les valeurs extrêmement grandes (par exemple, une date future au-delà de l'année 9999) sont découragées car elles peuvent causer des problèmes avec l'analyse des horodatages et le débordement arithmétique.

5.4. Pragma (Pragma)

Le champ d'en-tête "Pragma" permet la rétrocompatibilité avec les caches HTTP/1.0, afin que les clients puissent spécifier une requête "no-cache" qu'ils comprendront (car Cache-Control n'a été défini qu'avec HTTP/1.1). Lorsque le champ d'en-tête Cache-Control est également présent et compris dans une requête, Pragma est ignoré.

Dans HTTP/1.0, Pragma était défini comme un champ extensible pour les directives spécifiques à l'implémentation pour les destinataires. Cette spécification déconseille l'utilisation de Pragma pour autre chose que la rétrocompatibilité avec les déploiements HTTP/1.0.

Pragma = 1#pragma-directive
pragma-directive = "no-cache" / extension-pragma
extension-pragma = token [ "=" ( token / quoted-string ) ]

Lorsque le champ d'en-tête Cache-Control n'est pas présent dans une requête, les caches DOIVENT considérer le champ d'en-tête Pragma de la requête pour déterminer s'il y a une directive "no-cache".

Remarque : Étant donné que la signification de "Pragma : no-cache" dans les réponses n'est pas spécifiée, elle ne fournit pas un remplacement fiable pour "Cache-Control : no-cache" dans celles-ci. Les émetteurs NE DEVRAIENT PAS générer Pragma dans un message HTTP/1.1 qui inclut Cache-Control.