HTTP if-none-match und if-modified-since und 304 Klärung in PHP

8

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 ...

  1. "Wenn keines der Entity-Tags übereinstimmt" sprechen sie von $_SERVER['HTTP_IF_NONE_MATCH'] vs. meinen ETags, die ich früher gesendet habe?
  2. Wenn ich diese Aussage richtig verstanden habe, stoppe ich alle Überprüfungen und liefere die Seite normal, sobald keines der in $_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:

  1. Das Format von $_SERVER['HTTP_IF_NONE_MATCH'] kann entweder:

    sein

    a) If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"

    b) If-None-Match: "xyzzy"

    und NICHT:

    c) If-None-Match: "xyzzy, r2d2xxxx, c3piozzzz"

  2. Wenn !array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER) , gibt anyTagMatched () NULL zurück.

  3. Sobald ein ETag in $_SERVER['HTTP_IF_NONE_MATCH'] entspricht mein Dokument ETag, anyTagMatched () gibt TRUE.

  4. Wenn keine der Etags in $_SERVER['HTTP_IF_NONE_MATCH'] ist mein Dokument ETag passend, anyTagMatched() FALSCH.

  5. 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.

  6. 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.

AlexV 18.01.2010, 14:40
quelle

1 Antwort

5

Dies sollte am Ende (für besseren Blick verschoben) gesetzt werden.

%Vor%

Pseudocode (Überprüfung erforderlich):

%Vor%

Hauptantwort hier .

    
St.Woland 18.01.2010, 15:05
quelle

Tags und Links