wake-up-neo.com

Maximaler Wert für den Cache-Steuerungsheader in HTTP

Ich verwende Amazon S3, um statische Inhalte für meine Website bereitzustellen. Ich möchte, dass Browser diese Assets so lange wie möglich zwischenspeichern. Welche Metadaten-Header sollte ich meinem Vermögen hinzufügen?

Cache-Control: max-age=???
66
Casey Flynn

Im Allgemeinen wird ein Jahr als Standardmaximalwert empfohlen. Siehe RFC 2616 :

Um eine Antwort als "läuft nie ab" zu markieren, sendet ein Origin-Server ein Ablaufdatum ungefähr ein Jahr ab dem Zeitpunkt, an dem die Antwort gesendet wird. HTTP/1.1-Server DÜRFEN NICHT senden. Läuft in der Zukunft mehr als ein Jahr ab.

Obwohl dies für den älteren expires Standard gilt, ist es sinnvoll, cache-control auch ohne explizite normenvorgaben. Es ist so lange, wie Sie es im Allgemeinen sowieso brauchen sollten, und das Auswählen eines beliebig längeren Werts kann einige Benutzeragenten beschädigen. So:

Cache-Control: max-age=31536000
95
mahemoff

Denken Sie daran, es nicht "so lange wie möglich" zu speichern und es stattdessen so lange wie möglich abzurechnen. Zum Beispiel ist es unwahrscheinlich, dass Sie es länger als 10 Jahre zwischenspeichern müssen ... habe ich recht?

Der RFC behandelt hier das Höchstalter: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.

Eric Lawrence sagt, dass Internet Explorer vor IE9 alle Ressourcen mit einem Cache-Steuerelement als veraltet behandeln würde: Maximaler Alterswert über 2147483648 (2 ^ 31) Sekunden, ungefähr 68 Jahre ( http: //blogs.msdn) .com/b/ie/archive/2010/07/14/Caching-Verbesserungen-im-Internet-Explorer-9.aspx ).

Andere Benutzerprogramme variieren natürlich, also ... versuchen Sie, eine Zahl auszuwählen, bei der es unwahrscheinlich (und nicht wahrscheinlich!) Ist, dass sie einen Überlauf verursacht. Ein Höchstalter von mehr als 31536000 (ein Jahr) ist wenig sinnvoll, und dies wird informell als angemessener Höchstwert angesehen.

21

Die Leute, die die Empfehlung von maximal 1 Jahr Caching erstellt haben, haben es nicht richtig durchdacht.

Erstens, wenn einem Besucher eine veraltete zwischengespeicherte Datei zugestellt wird, warum sollte es dann von Vorteil sein, wenn er nach einem Jahr plötzlich eine neue Version lädt? Wenn eine Datei eine TTL von 1 Jahr hat, bedeutet dies aus funktionaler Sicht natürlich, dass die Datei überhaupt nicht geändert werden soll.

Warum sollte man mehr als 1 Jahr brauchen?

1) Warum nicht? Es hat keinen Zweck, dem Browser des Besuchers mitzuteilen, dass "hey, diese Datei ist 1 Jahr alt, es könnte eine Idee sein, zu überprüfen, ob sie aktualisiert wurde".

2) CDN-Dienste. Die meisten Content Delivery-Netzwerke verwenden den Cache-Header, um zu entscheiden, wie lange eine Datei vom Edgeserver effizient bereitgestellt werden soll. Wenn Sie die Cache-Kontrolle für die Dateien für 1 Jahr haben, werden ab einem bestimmten Zeitpunkt nicht geänderte Dateien erneut vom Origin-Server angefordert, und der Edge-Cache muss vollständig neu gefüllt werden, was zu einer langsameren und unnötigen Auslastung des Clients führt Anrufe zum Ursprung.

Was ist der Sinn von maximal 1 Jahr? Welche Browser verschlucken sich an einem Wert, der höher als 31536000 eingestellt ist?

1
suncat100