it-swarm.com.de

Auf was sollten meine Felder für den Ablauf, die Cache-Steuerung und den Pragma-HTTP-Anforderungsheader festgelegt werden?

Ich habe eine Website, auf der ich den Inhalt ungefähr einmal monatlich aktualisiere. Wenn ich die HTTP-Anforderungsheaderfelder überprüfe, erhalte ich die folgende Ausgabe:

Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache

Meine Frage ist, angesichts der Häufigkeit, mit der ich Inhalte aktualisiere, ich denke darüber nach, diese Felder manuell festzulegen, um den Cache der Site zu ermöglichen. Ich benutze den PHP-Header (); Befehl dazu.

Daher lautet meine Frage: Auf was sollen meine Felder für Ablaufdatum, Cache-Steuerung und Pragma-HTTP-Anforderungsheader festgelegt werden? Sollte ich zusätzlich zu diesen Feldern weitere Felder festlegen?

3
Wislow

Derzeit scheinen Ihre Cache-Einstellungen nicht mit Ihrem Aktualisierungszyklus übereinzustimmen. Ich denke, Sie sind auf dem richtigen Weg. Indem Sie Indikatoren hinzufügen, mit denen Ihre Site von Endbenutzern zwischengespeichert werden kann, und Inline-Caches, verbessern Sie die Benutzerfreundlichkeit und können möglicherweise die Bandbreite und die Serverauslastung reduzieren.

Wie Sie die oben genannten Einstellungen vornehmen, hängt von Ihrer Toleranz für veraltete Inhalte ab. Ich würde empfehlen, Cache-Control oder Pragma überhaupt nicht zu aktivieren und Expires auf einen Wert zu setzen, mit dem Sie (8 Stunden? Ein Tag?) Im Vergleich zum Besuch des Benutzers zufrieden sind. Dies ist jedoch sehr subjektiv und hängt von Ihrem Inhalt ab.

Zusätzlich zum Festlegen des obigen Werts auf einen angemessenen Wert sollten Sie auch einen Header wie Last-Modified oder ETag festlegen, der bedingte HEAD -Anfragen zulässt und sicherstellt, dass Sie mit 304 und ohne Inhalt antworten, wenn die Seite nicht vorhanden ist nicht geändert. Dies kann auf einem Datenbankfeld date_modified (sofern vorhanden) basieren oder für ein ETag auf einem Hash des Seiteninhalts.

Ich persönlich gehe ein paar Ansätze an. Auf statischen Seiten lasse ich mein Ausgabeskript PHP den Ausgabepuffer in ein Cache-Verzeichnis schreiben und verwende eine Apache-Umschreiberegel, die vom statischen Speicherort aus verwendet wird, wenn die Datei bereits vorhanden ist. Dann aktiviere ich im Cache-Verzeichnis Caching und DEFLATE-Behandlung der statischen HTML-Seiten mit mehr Apache-Direktiven. Der Code zum Schreiben des Ausgabepuffers ist standortspezifisch, aber hier ist der von mir verwendete Mod-Rewrite (in einer .htaccess-Datei im Unterverzeichnis articles).

RewriteEngine On
RewriteBase/articles /
RewriteCond% {DOCUMENT_ROOT}/cache% {REQUEST_URI} -f
RewriteRule.?/cache% {REQUEST_URI} [L]

Dies besagt im Grunde, dass, wenn die Datei im Cache vorhanden ist, Sie sie umleiten und das Neuschreiben beenden müssen.

Dann habe ich im Cache-Verzeichnis Einstellungen wie:

ExpiresActive On
ExpiresByType text/html "Zugang plus 1 Tag"
AddOutputFilterByType DEFLATE text/html

Und ich kombiniere dies mit Code in meinem Aktualisierungsbereich, der den Inhalt von /htdocs/cache/articles löscht, wenn Sie die Websitevorlage oder den Inhalt der Artikel ändern.

Das Schöne daran ist, dass Apache alle bedingten Anfragen und Komprimierungen für mich erledigt und ich nicht bei jeder Anfrage auf PHP treffe.

Für dynamischen PHP Code verwende ich die folgende All-in-One-Bibliothek, die GZip-Komprimierung, Ablauf, 304 If-Modified-Since-Antworten usw. verarbeitet:

http://alexandre.alapetite.fr/doc-alex/php-http-304/index.en.html

Sie können die beiden sogar kombinieren, indem Sie Alexandres Skript so modifizieren, dass der Ausgabepuffer beim ersten Rendern statischer Seiten in den Cache-Ordner geschrieben wird.

3
JasonBirch