Meine Frage ist, wie ein HTTP 304 "Not Modified" zu antworten, wenn ich erhalte beide , wenn-nichts-Spiel und if-modified-since von einem Proxy / Client-Anfrage.
Von RFC 2616 secttion 14.26 ( Ссылка ):
Wenn keines der Entity-Tags übereinstimmt, dann Der Server kann die angeforderten durchführen Methode als ob die If-None-Match-Header Feld gab es nicht, aber MUSS auch Ignoriere jeden If-Modified-Since-Header Feld (e) in der Anfrage. Das heißt, wenn Keine Entity Tags stimmen überein, dann der Server MUSS KEINE 304 (Nicht geändert) zurückgeben Antwort.
Ich bin nicht sicher, diese Aussage zu verstehen ...
$_SERVER['HTTP_IF_NONE_MATCH']
vs. meinen ETags, die ich früher gesendet habe? $_SERVER['HTTP_IF_NONE_MATCH']
aufgeführten ETags mit meinen ETags übereinstimmt. Jeder kann dieses RFC-Teil in Pseudocode (oder PHP-Code) übersetzen und / oder meine 2 Punkte oben beantworten?
EDIT 1: Danke St.Woland für deine Antwort. Können Sie (oder jemand anderes) mir sagen, ob ich in diesen 6 Punkten richtig bin:
Das Format von $_SERVER['HTTP_IF_NONE_MATCH']
kann entweder:
a) If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
b) If-None-Match: "xyzzy"
und NICHT:
c) If-None-Match: "xyzzy, r2d2xxxx, c3piozzzz"
Wenn !array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)
, gibt anyTagMatched () NULL zurück.
Sobald ein ETag in $_SERVER['HTTP_IF_NONE_MATCH']
entspricht mein Dokument ETag, anyTagMatched () gibt TRUE.
Wenn keine der Etags in $_SERVER['HTTP_IF_NONE_MATCH']
ist mein Dokument ETag passend, anyTagMatched()
FALSCH.
Wenn $_SERVER['HTTP_IF_MODIFIED_SINCE']
eingestellt und paßt mein Dokument "zuletzt geändert" date isExpired()
gibt false zurück, andernfalls TRUE zurück.
Sobald anyTagMatched()
TRUE zurück, Ich gebe ein 304. Wenn anyTagMatched () zurückgegeben NULL und isExpired()
FALSCH ich 304. In jeder anderen Situation ausgeben kann ich meine Seite als normal dienen (I geben Sie auch die aktuellen Last-Modified- und ETag-Header an.