2016-05-15 8 views
2

Ich versorge derzeit eine HTML-Seite für Benutzer mit einem Cache-Control: max-age=600 Header. Ich glaube, das erlaubt den Browsern der Benutzer, die Seite für maximal 10 Minuten zwischenzuspeichern.Wie ist Cache-Control: Max-Age von Zwischen-Caching betroffen?

Ich denke darüber nach, ein CDN vor meinen Server zu legen, das aufgrund des obigen Headers auch die Seite für maximal 10 Minuten zwischenspeichern sollte.

Wenn ein Benutzer die Seite erhält, die sich seit 9 Minuten im CDN-Cache befindet, wird sie z. B. noch für 10 Minuten im Browser zwischengespeichert, sodass die gesamte zwischengespeicherte Zeit 19 Minuten beträgt? Oder wird es nur 1 Minute im Browser zwischengespeichert?

Antwort

2

Hier gibt es zwei grundlegende Ansätze.

Der CDN kann entscheiden, dass es sich um einen HTTP-Cache handelt, wie in RFC 7234 definiert. In diesem Fall muss ein Header Age zu jeder Antwort hinzugefügt werden, die er aus dem Cache bedient (ohne Ihren Server zu kontaktieren). Es muss auch halten der Date Header von Ihrem Server gesendet werden. Dadurch kann ein Downstream-Cache (z. B. der Cache des Browsers) feststellen, um wie viel Zeit es die Antwort zwischenspeichern kann.

Zum Beispiel, wenn Ihr Server sendet:

HTTP/1.1 200 OK 
Server: nginx/1.9.12 
Date: Sun, 15 May 2016 16:51:31 GMT 
Cache-Control: max-age=600 

dann könnte der Cache senden:

HTTP/1.1 200 OK 
Server: nginx/1.9.12 
Date: Sun, 15 May 2016 16:51:31 GMT 
Cache-Control: max-age=600 
Age: 541 
Via: 1.1 mycdn 

Dieser Ansatz verwendet wird, beispielsweise durch Amazon CloudFront und durch Varnish (und damit von Fastly). Manchmal kommt es bei Caches zu Fehlern: until a couple years ago, Varnish würde den Header Date fälschlicherweise bei zwischengespeicherten Antworten zurücksetzen. In meinen Experimenten scheinen Firefox und Chrome jedoch nicht davon verwirrt zu sein (weil Age immer noch da ist).

Alternativ entscheiden die CDN kann, dass es ein HTTP Ursprungsserver und durch seine eigene Regeln mit Ihrem Server zusammenarbeiten. In diesem Fall muss es nicht fügen Sie einen Age Header, und es muss zurückgesetzt die Date Kopf aber dann kann es auch tun, was es zu den anderen Header will, einschließlich Cache-Control. Zum Beispiel kann es die max-age durch die Anzahl der Sekunden verringern, dass das Objekt in seinem Cache ausgegeben:

HTTP/1.1 200 OK 
Server: MyCDN/1.2.3 
Date: Sun, 15 May 2016 17:00:32 GMT 
Cache-Control: max-age=59 

Aber es dies nicht einmal tun kann, wie allgemein das Caching ist sehr nützlich für statische Inhalte, die in der Regel versioniert und zwischengespeichert "für immer". So, zum Beispiel, wann immer Sie https://code.jquery.com/jquery-2.2.3.js (serviert von MaxCDN), es kommt mit der gleichen max-age=315360000 und einem Expires weit in der Zukunft.

So müssen Sie wahrscheinlich überprüfen, wie Ihr bestimmter CDN dies behandelt.

+1

Eine sehr informative Antwort, danke. Ich schaute mir einige Seiten an, die über CloudFront bereitgestellt wurden und war überrascht, dass 'max-age' nicht abnahm (wie in Ihrem zweiten Ansatz). Ich habe nicht bemerkt, dass "Age" stattdessen zugenommen hat. – user200783

Verwandte Themen