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:
-
Lorsque le destinataire est le serveur d'origine et que
If-Matchest présent, évaluer la préconditionIf-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)
-
Lorsque le destinataire est le serveur d'origine, que
If-Matchn'est pas présent et queIf-Unmodified-Sinceest présent, évaluer la préconditionIf-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)
-
Lorsque
If-None-Matchest présent, évaluer la préconditionIf-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)
-
Lorsque la méthode est GET ou HEAD, que
If-None-Matchn'est pas présent et queIf-Modified-Sinceest présent, évaluer la préconditionIf-Modified-Since:- si true, continuer à l'étape 5
- si false, répondre 304 (Not Modified)
-
Lorsque la méthode est GET et que
RangeetIf-Rangesont tous deux présents, évaluer la préconditionIf-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)
-
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.