Ist meine Implementierung von HTTP Conditional Get Antworten in PHP in Ordnung?

8

Nachdem ich viel gesucht, alle Tutorials gelesen und einige Fragen gestellt habe, ist es mir schließlich gelungen, (zumindest denke ich) korrekt auf "if-none-match" und "if-modified" seit HTTP-Anfragen zu antworten.

Um eine kurze Zusammenfassung zu machen, das ist, was ich auf alle Seiten cachefähig mache:

%Vor%

Außerdem hat jede Seite eine eigene URL (für jede Sprache). Zum Beispiel wird "index.php" unter der URL "/ en / home" in Englisch und "/ fr / accueil" in Französisch geliefert.

Mein großes Problem war die Antwort auf "304 Not Modified" auf "if-none-match" und "if-modified-since", da HTTP nur bei Bedarf anfordert .

Der beste Doc, den ich gefunden habe, ist: Ссылка

Und das ist die Implementierung, die ich daraus gemacht habe (dieser Codeabschnitt heißt auf Seiten, die zwischengespeichert werden können, ASAP):

%Vor%

Meine Frage ist zweifach:

  • Ist das der richtige Weg? Ich meine, wenn if-none-match und if-modified-since gesendet werden, müssen beide übereinstimmen, um eine 304 zu beantworten, und wenn nur eine der beiden gesendet wird, ist es nur OK, diese zu senden ein 304?
  • Wenn diese 2 Snippets in dem hier beschriebenen Kontext verwendet werden, sind sie öffentlich cache-freundlich (ich meine cache-freundlich auf Proxies und Webbrowsern)?

BTW, ich benutze nur PHP 5.1.0+ (ich unterstütze keine niedrigeren Versionen als das).

Edit: Added Bounty ... Ich erwarte Qualität Antwort. Antworte nicht, wenn du etwas rätst!

    
AlexV 07.01.2010, 16:32
quelle

1 Antwort

22
  • Das stimmt nicht ganz. Bitte werfen Sie einen Blick auf den Algorithmus: alt text http://img532.imageshack.us/img532/1017/cache. png
  • Die Lösung ist proxy-freundlich. Sie können Cache-control: proxy-revalidate verwenden, um zu erzwingen, dass Caches den Informationen zu einer Ressource gehorchen (gilt nur für gemeinsam genutzte | Proxy-Caches)

Hier ist die Funktion, die helfen könnte:

%Vor%

Ich schlage vor, dass Sie einen Blick auf den folgenden Artikel werfen: Ссылка

Aktualisierung:

  

[AlexV] Ist es sogar möglich, if-none-match UND if-modified-da gleichzeitig zu erhalten?

Sie können definitiv beide festgelegt haben. Jedoch:

  

Wenn keine der Entity-Tags übereinstimmt, dann kann der Server die angeforderte Methode so ausführen, als ob das If-None-Match-Header-Feld nicht existiert, aber MÜSSEN auch alle If-Modified-Since-Header-Felder in der. ignorieren anfordern. Das heißt, wenn keine Entity-Tags übereinstimmen, dann darf der Server KEINE 304 (Not Modified) Antwort zurückgeben.

     

RFC2616 # 14.26

Beispielwerte (W steht für "schwach"; lesen Sie mehr in RFC2616 # 13.3. 3 ):

%Vor%

Als Sonderfall entspricht der Wert "*" einer beliebigen aktuellen Entität der Ressource.

    
St.Woland 12.01.2010, 14:43
quelle