Ich verwende Amazon S3, um statische Assets für meine Website bereitzustellen. Ich möchte, dass Browser diese Assets so lange wie möglich zwischenspeichern. Welche Metadaten-Header sollte ich in mein Vermögen aufnehmen?
Cache-Control: max-age=???
Ich verwende Amazon S3, um statische Assets für meine Website bereitzustellen. Ich möchte, dass Browser diese Assets so lange wie möglich zwischenspeichern. Welche Metadaten-Header sollte ich in mein Vermögen aufnehmen?
Cache-Control: max-age=???
Antworten:
In der Regel wird ein Jahr als Standardmaximalwert empfohlen. Siehe RFC 2616 :
Um eine Antwort als "Nie abläuft" zu markieren, sendet ein Ursprungsserver ein Ablaufdatum ungefähr ein Jahr nach dem Zeitpunkt, an dem die Antwort gesendet wird. HTTP / 1.1-Server sollten keine Ablaufdaten senden, die länger als ein Jahr in der Zukunft liegen.
Obwohl dies für den älteren expires
Standard gilt, ist es sinnvoll, dies auch zu tun, wenn cache-control
keine expliziten Richtlinien für Standards vorliegen. Es ist so lange, wie Sie es im Allgemeinen sowieso brauchen sollten, und die Auswahl eines beliebig längeren Werts könnte einige Benutzeragenten beschädigen. Damit:
Cache-Control: max-age=31536000
Speichern Sie es nicht "so lange wie möglich", sondern so lange wie möglich. Zum Beispiel ist es unwahrscheinlich, dass Sie es länger als 10 Jahre zwischenspeichern müssen ... habe ich recht?
Der RFC erörtert das maximale Alter hier: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3
Eric Lawrence sagt, dass Internet Explorer vor IE9 jede Ressource mit einem Cache-Control 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-improvements-in-internet-explorer-9.aspx ).
Andere Benutzeragenten variieren natürlich, also ... versuchen Sie, eine Zahl zu wählen, die wahrscheinlich (und nicht wahrscheinlich!) Einen Überlauf verursacht. Ein Höchstalter von mehr als 31536000 (ein Jahr) ist wenig sinnvoll, und dies wird informell als angemessener Höchstwert angesehen.
Die Leute, die die Empfehlung für ein Caching von maximal 1 Jahr erstellt haben, haben es nicht richtig durchdacht.
Wenn einem Besucher eine veraltete zwischengespeicherte Datei zugestellt wird, warum sollte es dann von Vorteil sein, wenn er nach 1 Jahr plötzlich eine neue Version lädt? Wenn eine Datei aus funktionaler Sicht eine TTL von 1 Jahr hat, bedeutet dies offensichtlich, dass die Datei überhaupt nicht geändert werden soll.
Warum sollte man also mehr als 1 Jahr brauchen?
1) Warum nicht? Es hat keinen Zweck, dem Besucherbrowser mitzuteilen, "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 effizient vom Edgeserver bereitgestellt werden soll. Wenn Sie über eine 1-Jahres-Cache-Kontrolle für die Dateien verfügen, werden irgendwann nicht geänderte Dateien vom Ursprungsserver erneut angefordert, und der Edge-Cache muss vollständig neu gefüllt werden, was zu langsameren und unnötigen Ladevorgängen für den Client führt ruft zum Ursprung.
Was bringt es, maximal 1 Jahr zu haben? Welche Browser ersticken an einem Betrag, der höher als 31536000 ist?