6. Precedence (Precedenza)
Quando più di un campo di intestazione di richiesta condizionale è presente in una richiesta, l'ordine in cui i campi vengono valutati diventa importante. In pratica, i campi definiti in questo documento sono implementati in modo coerente in un unico ordine logico, poiché le precondizioni di "aggiornamento perso" hanno requisiti più rigorosi rispetto alla validazione della cache, e un tag di entità è presunto essere più accurato di un valore di data.
Un destinatario cache o server di origine DEVE valutare le precondizioni di richiesta definite da questa specifica nel seguente ordine:
-
Quando il destinatario è il server di origine e
If-Matchè presente, valutare la precondizioneIf-Match:- se true, continuare con il passo 3
- se false, rispondere con 412 (Precondition Failed) a meno che non possa essere determinato che la richiesta di cambio di stato ha già avuto successo (vedi Sezione 3.1)
-
Quando il destinatario è il server di origine,
If-Matchnon è presente eIf-Unmodified-Sinceè presente, valutare la precondizioneIf-Unmodified-Since:- se true, continuare con il passo 3
- se false, rispondere con 412 (Precondition Failed) a meno che non possa essere determinato che la richiesta di cambio di stato ha già avuto successo (vedi Sezione 3.4)
-
Quando
If-None-Matchè presente, valutare la precondizioneIf-None-Match:- se true, continuare con il passo 5
- se false per GET/HEAD, rispondere con 304 (Not Modified)
- se false per altri metodi, rispondere con 412 (Precondition Failed)
-
Quando il metodo è GET o HEAD,
If-None-Matchnon è presente eIf-Modified-Sinceè presente, valutare la precondizioneIf-Modified-Since:- se true, continuare con il passo 5
- se false, rispondere con 304 (Not Modified)
-
Quando il metodo è GET e sia
RangecheIf-Rangesono presenti, valutare la precondizioneIf-Range:- se true e la specifica Range è applicabile alla rappresentazione selezionata, rispondere con 206 (Partial Content) [RFC7233]
- altrimenti, ignorare il campo di intestazione Range e rispondere con 200 (OK)
-
Altrimenti,
- eseguire il metodo richiesto e rispondere in base al suo successo o fallimento.
Qualsiasi estensione HTTP che definisce campi di intestazione di richiesta condizionale aggiuntivi dovrebbe definire il proprio ordine di valutazione relativo ai campi di intestazione di richiesta condizionale definiti in questo documento. Consentire ai campi di estensione di ridefinire la precedenza dei campi di intestazione condizionale standard, o di dipendere dal risultato della valutazione di un campo standard, porterebbe a un comportamento ambiguo o incoerente.