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.
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