Ich habe RFC 2616 - sec14.26 und
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
If-Modified-Since
stimmt überein, aber If-None-Match
nicht. 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.
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.
Tags und Links http http-headers