Die cache-control
header ist der Hauptmechanismus für einen HTTP-Server, um einem Caching-Proxy die "Frische" einer Antwort mitzuteilen. (Das heißt, wie/wenn die Reaktion lange im Cache speichern)
In einigen Situationen sind cache-control
Richtlinien unzureichend. Eine Diskussion aus der HTTP-Arbeitsgruppe wird archiviert here, beschreibt eine Seite, die nur mit Sprache ändert. Dies ist nicht der richtige Anwendungsfall für die variieren Kopfzeile, aber der Kontext ist wertvoll für unsere Diskussion. (Obwohl ich glaube, dass die Vary-Header das Problem in diesem Fall lösen würden, gibt es einen besseren Weg.) Von dieser Seite:
Vary
ist ausschließlich für jene Fälle, wo es aussichtslos oder zu kompliziert für ein Proxy, um zu replizieren, was der Server tun würde.
Ein konstruiertes Beispiel:
Ihr HTTP-Server verfügt über eine große Zielseite. Sie haben zwei leicht unterschiedliche Seiten mit derselben URL, je nachdem, ob der Benutzer schon einmal dort war. Sie unterscheiden zwischen Anfragen und der "Besuchsanzahl" eines Nutzers basierend auf Cookies.Aber - Da die Zielseite Ihres Servers so groß ist, möchten Sie, dass Zwischenmitteilungen die Antwort zwischenspeichern, wenn möglich.
Die URL, Last-Modified und Cache-Control-Header sind unzureichend diese Einsicht zu einem Caching-Proxy zu geben, aber wenn Sie Vary: Cookie
hinzufügen, wird die Cache-Maschine der Cookie-Header in seine Caching Entscheidungen hinzuzufügen.
Schließlich, für kleine Verkehr, dynamische Websites - Ich habe immer die einfache Cache-Control: no-cache, no-store
und Pragma: no-cache
ausreichend gefunden.
Edit - um Ihre Frage genauer zu beantworten: Der HTTP-Request-Header 'Accept' definiert die Content-Typen, die ein Client verarbeiten kann. Wenn Sie zwei Kopien desselben Inhalts unter derselben URL haben, die sich nur in Content-Type unterscheiden, kann die Verwendung von Vary: Accept
angemessen sein.
-Update 11. September 12:
Ich bin auch ein paar Links, die in den Kommentaren erschienen sind, da dieser Kommentar ursprünglich geschrieben wurde. Sie sind beide hervorragende Ressourcen für reale Beispiele (und Probleme) mit Vary: Accept; Wenn Sie diese Antwort lesen, müssen Sie auch diese Links lesen.
Die erste, von der hervorragenden EricLaw, über das Verhalten des Internet Explorer mit dem Vary-Header und einige der Herausforderungen, die es an Entwickler stellt: Vary Header Prevents Caching in IE. Kurz gesagt, der IE (pre IE9) speichert keinen Inhalt, der den Vary-Header verwendet, weil der Request-Cache keine HTTP-Request-Header enthält. Eric Law (Eric Lawrence in der realen Welt) ist Programm-Manager im IE-Team.
Die zweite stammt von Eran Medan und ist eine fortlaufende Diskussion über unerwartetes Verhalten bei Vary in Chrome: Backing doesn't handle Vary header correctly. Es hängt mit dem Verhalten von IE zusammen, mit der Ausnahme, dass die Chrome-Entwickler einen anderen Ansatz gewählt haben - obwohl dies offenbar keine bewusste Entscheidung war.
Ehrlich gesagt - nicht die Mühe, . Abgesehen von den Fehlern in der Implementierung auf dieser Site ist die einzige Zeit, die Sie Vorteile von der Bereitstellung mit einem XML-Inhaltstyp erhalten, wenn Sie Dinge tun, die nicht in Text/HTML getan werden können - und wenn Sie alles tun Ändert den Doctype und xmlns, dann werden Sie diese Dinge nicht tun. Bleiben Sie bei Text/HTML. Sie können sich auch an HTML 4.01 halten. – Quentin
Ja, ich verstehe das und ich denke "Probleme" wie diese entstehen viel zu oft in der Web-Entwicklung. Dank "sollte" in Spezifikationen/RFCs! – AlexV
Sie sollten dies wahrscheinlich lesen: http://blogs.msdn.com/ieinternals/archive/2009/06/17/Vary-Header-Prevents-Caching-in-IE.aspx, bevor Sie VARY in Betracht ziehen. – EricLaw