Aller au contenu principal

6. Precedence (Priorité)

Lorsque plusieurs champs d'en-tête de requête conditionnelle sont présents dans une requête, l'ordre dans lequel les champs sont évalués devient important. En pratique, les champs définis dans ce document sont implémentés de manière cohérente dans un ordre logique unique, car les préconditions de "mise à jour perdue" ont des exigences plus strictes que la validation du cache, et une balise d'entité est présumée être plus précise qu'une valeur de date.

Un cache destinataire ou un serveur d'origine DOIT évaluer les préconditions de requête définies par cette spécification dans l'ordre suivant:

  1. Lorsque le destinataire est le serveur d'origine et que If-Match est présent, évaluer la précondition If-Match:

    • si true, continuer à l'étape 3
    • si false, répondre 412 (Precondition Failed) sauf s'il peut être déterminé que la requête de changement d'état a déjà réussi (voir Section 3.1)
  2. Lorsque le destinataire est le serveur d'origine, que If-Match n'est pas présent et que If-Unmodified-Since est présent, évaluer la précondition If-Unmodified-Since:

    • si true, continuer à l'étape 3
    • si false, répondre 412 (Precondition Failed) sauf s'il peut être déterminé que la requête de changement d'état a déjà réussi (voir Section 3.4)
  3. Lorsque If-None-Match est présent, évaluer la précondition If-None-Match:

    • si true, continuer à l'étape 5
    • si false pour GET/HEAD, répondre 304 (Not Modified)
    • si false pour d'autres méthodes, répondre 412 (Precondition Failed)
  4. Lorsque la méthode est GET ou HEAD, que If-None-Match n'est pas présent et que If-Modified-Since est présent, évaluer la précondition If-Modified-Since:

    • si true, continuer à l'étape 5
    • si false, répondre 304 (Not Modified)
  5. Lorsque la méthode est GET et que Range et If-Range sont tous deux présents, évaluer la précondition If-Range:

    • si true et que la spécification Range est applicable à la représentation sélectionnée, répondre 206 (Partial Content) [RFC7233]
    • sinon, ignorer le champ d'en-tête Range et répondre 200 (OK)
  6. Sinon,

    • effectuer la méthode demandée et répondre selon son succès ou son échec.

Toute extension HTTP qui définit des champs d'en-tête de requête conditionnelle supplémentaires devrait définir son propre ordre d'évaluation par rapport aux champs d'en-tête de requête conditionnelle définis dans ce document. Permettre aux champs d'extension de redéfinir la priorité des champs d'en-tête conditionnels standard, ou de dépendre du résultat d'évaluation d'un champ standard, conduirait à un comportement ambigu ou incohérent.