Aller au contenu principal

4. Constructing Responses from Caches

Lorsqu'une requête est présentée, un cache NE DOIT PAS (MUST NOT) réutiliser une réponse stockée, sauf si :

  • L'URI de requête effective présentée (Section 5.5 de [RFC7230]) et celle de la réponse stockée correspondent, et
  • la méthode de requête associée à la réponse stockée permet son utilisation pour la requête présentée, et
  • les champs d'en-tête de sélection désignés par la réponse stockée (le cas échéant) correspondent à ceux présentés (voir Section 4.1), et
  • la requête présentée ne contient pas le pragma no-cache (Section 5.4), ni la directive de cache no-cache (Section 5.2.1), sauf si la réponse stockée est validée avec succès (Section 4.3), et
  • la réponse stockée ne contient pas la directive de cache no-cache (Section 5.2.2.2), sauf si elle est validée avec succès (Section 4.3), et
  • la réponse stockée est soit :
    • fraîche (voir Section 4.2), ou
    • autorisée à être servie périmée (voir Section 4.2.4), ou
    • validée avec succès (voir Section 4.3).

Notez que l'une quelconque des exigences énumérées ci-dessus peut être remplacée par une extension de contrôle de cache ; voir Section 5.2.3.

Lorsqu'une réponse stockée est utilisée pour satisfaire une requête sans validation, un cache DOIT (MUST) générer un champ d'en-tête Age (Section 5.1), en remplaçant tout champ présent dans la réponse par une valeur égale au current_age de la réponse stockée ; voir Section 4.2.3.

Un cache DOIT (MUST) transmettre directement les requêtes avec des méthodes non sûres (Section 4.2.1 de [RFC7231]) au serveur d'origine ; c'est-à-dire qu'un cache n'est pas autorisé à générer une réponse à une telle requête avant d'avoir transféré la requête et reçu une réponse correspondante.

De plus, notez que les requêtes non sûres peuvent invalider des réponses déjà stockées ; voir Section 4.4.

Lorsque plusieurs réponses appropriées sont stockées, un cache DOIT (MUST) utiliser la réponse la plus récente (telle que déterminée par le champ d'en-tête Date). Il peut également transférer la requête avec "Cache-Control : max-age=0" ou "Cache-Control : no-cache" pour lever l'ambiguïté sur la réponse à utiliser.

Un cache qui ne dispose pas d'une horloge NE DOIT PAS (MUST NOT) utiliser des réponses stockées sans les revalider à chaque utilisation.