Warum wird das Cache-Control-Attribut im Anforderungsheader (Client an Server) gesendet?

163

Nachdem Sie das Cache-ControlFeld des HTTP-Headers gelesen haben ,

Ich verstehe , dass das Cache-ControlFeld in dem HTTP - Antwort - Header (Server zum Client) für den Zwischen Proxy - Server / Client - Browser , die Richtlinien festgelegt, wie die Antwort zu handhaben , durch unterschiedliche Werte für das Senden von Cache-ControlFeld: private, public, no-cache, oder no-storeim Antwort - Header.

Aber ich verstehe nicht, warum wir das Cache-ControlAttribut im Anforderungsheader (Client an Server) senden müssen .

Student
quelle

Antworten:

137

Cache-Control: no-cachewird im Allgemeinen in einem Anforderungsheader (vom Webbrowser an den Server gesendet) verwendet, um die Validierung der Ressource in den Zwischenproxys zu erzwingen. Wenn der Client diese Anforderung nicht an den Server sendet, geben Zwischenproxys eine Kopie des Inhalts zurück, wenn er frisch ist (gemäß Expireoder max-ageFeldern nicht abgelaufen ist ). Cache-ControlWeist diese Proxys an, die Kopie erneut zu validieren, auch wenn sie frisch ist.

David
quelle
8
Könnte hier zu spät sein, aber außer was sind die anderen Verwendungszwecke? Wird das Max-Age-Feld für irgendeinen Zweck verwendet?
Sam
Warum neigen moderne Browser dazu? Sie vertrauen den Zwischenproxies nicht, obwohl sie sich gemäß den Webstandards verhalten?
Rogerdpack
1
@rogerdpack nein, weil sie ihnen vertrauen, senden sie den vertrauenswürdigen Header, um anzuzeigen, dass sie einen besonderen Grund haben, mehr Frische zu verlangen, als die meisten Verwendungen benötigen.
Jon Hanna
1
@rogerdpack, wenn Sie gerade etwas getan haben, von dem Sie wissen, dass es den Status geändert hat und dies widerspiegeln möchte, wäre ein klassischer Fall.
Jon Hanna
7
@ JonHanna Vielleicht haben Sie in den Chrome Developer Tools die Option "Cache deaktivieren" aktiviert? : D
Gregory Magarshak
15

Ein Client kann einen Cache-ControlHeader in einer Anforderung senden, um ein bestimmtes Caching-Verhalten, z. B. eine erneute Validierung, vom Ursprungsserver und allen Zwischenproxyservern entlang des Anforderungspfads anzufordern.

bdash
quelle
4

Zusätzlich zu der obigen Antwort
gibt es möglicherweise ein Setup, in dem die Cache-Verkettung implementiert ist. In diesem Fall wird die Anforderung möglicherweise in den weiter verketteten Cache verschoben, wenn sie in den ersten Cache gelangt, in dem sie nicht erfüllt ist.

Um die Antwort immer vom Server zu erhalten, fügen wir die Cache-Steuerung in die Anforderungsheader ein. Dadurch wird sichergestellt, dass die Antwort immer vom Server kommt.

Loui
quelle
Sie sagen: "Um die Antwort immer vom Server zu erhalten, fügen wir die Cache-Steuerung in die Anforderungsheader ein. Dadurch wird sichergestellt, dass die Antwort immer vom Server stammt." Welcher Wert dieses Headers würde das erreichen?
Don Hatch
Cache-Control: no-cachewird die Proxys anweisen, sicherzustellen, dass die Antwort vollständig validiert ist.
Mogsie