Was ist, wenn sowohl If-Modified-Since als auch If-None-Match in HTTP-Headern vorhanden sind

9

Ich habe RFC 2616 - sec14.26 und RFC 2616 - Sec 13.3.3 für eine ziemlich lange Zeit, aber ich bin immer noch nicht sicher, ob ich es richtig verstehe.

Der Abschnitt 14.26 besagt, dass

  

Wenn eines der Entity-Tags mit dem Entitätstag der Entität übereinstimmt, die in der Antwort auf eine ähnliche GET-Anforderung (ohne den If-None-Match-Header) auf dieser Ressource zurückgegeben wurde, oder wenn "*" angegeben wird und eine aktuelle Entität für diese Ressource vorhanden ist, MUSS der Server die angeforderte Methode NICHT ausführen, es sei denn, dies ist erforderlich, da das Änderungsdatum der Ressource nicht mit dem in einer If-Modified- angegebenen übereinstimmt. Seit Header Feld in der Anfrage. Wenn die Anforderungsmethode GET oder HEAD ist, sollte der Server stattdessen mit einer 304 (Not Modified) Antwort antworten, einschließlich der Cache-bezogenen Header-Felder (insbesondere ETag) einer der übereinstimmenden Entitäten.

,

  

Wenn keines der Entity-Tags entspricht, kann der Server die angeforderte Methode so ausführen, als ob das If-None-Match-Header-Feld nicht existiert, MUSS aber auch If-Modified-Since ignorieren Header-Feld (e) in der Anfrage. Das heißt, wenn keine Entity-Tags übereinstimmen, MUSS der Server KEINE 304 (Nicht geändert) -Antwort zurückgeben.

und der Abschnitt 13.3.3 besagt, dass

  

Ein HTTP / 1.1-Ursprungsserver, der eine bedingte Anforderung erhält, die sowohl ein Datum der letzten Änderung (z. B. in einem Kopfteil "Wenn geändert" oder "Wenn-nicht-geändert-seit") als auch ein oder mehrere Entitäts-Tags enthält (z , in einem If-Match-, If-None-Match- oder If-Range-Header-Feld) als Cache-Validierer, MÜSSEN keinen Antwortstatus von 304 (Nicht geändert) zurückgeben, es sei denn, dies ist konsistent mit dem gesamten bedingten Header Felder in der Anfrage.

Ich bin ziemlich verwirrt, ob ein bedingungsloser HTTP-Server auf eine Client-Anfrage antworten sollte ( GET / HEAD ) wo

  1. Die Bedingung If-Modified-Since stimmt überein, aber If-None-Match nicht.
  2. oder, die Bedingung If-None-Match stimmt überein, aber If-Modified-Since nicht.

Gemäß Abschnitt 14.26 sollte 304 Not Modified im ersten Fall und 200 OK im zweiten Fall zurückgegeben werden, da If-Modified-Since ignoriert wird.

Aber der Abschnitt 13.3.3 sagt, dass "es keinen Antwortstatus von 304 (Not Modified) zurückgeben darf, es sei denn, dies ist konsistent mit allen bedingten Header-Feldern in der Anfrage." , Das bedeutet, dass 200 OK in beiden Fällen zurückgegeben werden sollte.

    
rAy 15.08.2014, 06:19
quelle

1 Antwort

11

aus RFC 7232

  

Ein Empfänger muss If-Modified-Since ignorieren, wenn die Anfrage ein If-None-Match-Header-Feld enthält; Die Bedingung in If-None-Match wird als genauerer Ersatz für die Bedingung in If-Modified-Since betrachtet, und die beiden werden nur zur Interoperation mit älteren Intermediären kombiniert, die If-None-Match möglicherweise nicht implementieren.

    
SKing7 03.02.2016, 05:30
quelle

Tags und Links