2016-03-31 2 views
2

Wenn eine Seite Antworten mit KopfWie Cache-Control: private, s-maxage = 0 sollte sich auf AJAX-Anfragen verhalten?

Cache-Control:private, s-maxage=0 

Sollten die Seite jemals durch den Browser oder nicht zwischengespeichert werden? Was ist das Spezifikationsverhalten in diesem Fall?

RFC2616 definiert s-maxage hat:

Wenn eine Antwort eine s-maxage Richtlinie enthält, dann für einen gemeinsam genutzten Cache (aber nicht für einen privaten Cache), das maximale Alter in dieser Richtlinie festgelegten Vorrang vor der maximales Alter, das entweder durch die Max-Age-Direktive oder die Expires-Kopfzeile angegeben wird. Die s-maxage-Direktive beinhaltet auch die Semantik der proxy-revalidate-Direktive (siehe Abschnitt 14.9.4), dh der Shared-Cache darf den Eintrag nicht verwenden, nachdem er abgestanden ist, um auf eine nachfolgende Anfrage zu antworten, ohne sie zuvor erneut zu validieren Ursprungsserver. Die s-maxage-Direktive wird immer von einem privaten Cache ignoriert.

Das verwirrt mich ein wenig. Ich verstehe, dass s-Maxage für einen gemeinsamen Cache verwendet wird, wenn max-age und s-maxage definiert ist, aber was passiert mit einem privaten (Browser) Cache? Wird s-maxage immer noch vom privaten Cache verwendet oder nicht?

Meine Tests zeigen, dass Chrome 49 und Firefox 44 diese Seitenanforderung nicht zwischenspeichern würden, während IE 11 das Browser-Caching dieser Seite effektiv durchführt (Tests auf win7 64bit). Diese Seitenanforderung erfolgt über AJAX, falls das wichtig ist.

So können Sie sehen, dass verschiedene Browser unterschiedliche Verhaltensweisen haben. Wenn man die Spezifikation liest, scheint es, dass IE hier falsch liegt. Was ist die Ursache dafür? Vielleicht unterschiedliche Standardwerte?

Edit: Weitere Tests zeigen mir, dass meine Kopfzeile genauso funktioniert wie Cache-Control:private.

In diesem Fall Chrome nie benutzt Browser-Cache für beide eine 'normale' Seitenanforderung und eine AJAX-Request GET während IE 11 nicht auf die normale Seite Anfrage aber Caches der AJAX-Request GET zwischenspeichert, ohne ersichtliche gut Grund.

Antwort

1

Sollte die Seite jemals vom Browser zwischengespeichert werden oder nicht?

Wie Sie vorschlagen, sollte ein Browser s-maxage ignorieren. Von the spec:

Das „s-maxage“ gibt Antwort Richtlinie, dass in gemeinsam genutzten Caches, das Höchstalter von dieser Richtlinie festgelegten entweder durch die maxage Richtlinie angegebene Höchstalter überschreibt oder Verfällt Header Feld.

Ebenso der Browser ignoriert Cache-Control: private:

Die „private“ Antwort-Richtlinie gibt an, dass die Antwortnachricht für einen einzelnen Benutzer bestimmt und darf nicht von einem gemeinsamen Cache gespeichert werden.

Ein Browser mit einem privaten Cache sollte beide dieser Direktiven ignorieren; Sie gelten nur für gemeinsam genutzte Caches.

Als solche wird der Header im Wesentlichen vom Browser ignoriert; es sollte heuristisch im Cache wie eine Antwort ohne Cache-Control Header im Cache gespeichert werden.

Verwandte Themen