IIS/ASP.NET antwortet mit cache-control: private, für alle Anforderungen
Warum nicht alle Antworten von ASP.NET enthalten Cache-Control: private
? Auch eine 404-Antwort? Gibt es etwas, das in IIS, setzt diesen Standard-Wert, und gibt es eine Möglichkeit, es zu konfigurieren? Oder ist es etwas in ASP.NET setzt diese?
Für dynamische Inhalte (das heißt, alle MVC-Ergebnisse) ich würde es nicht gefallen, werden vom browser zwischengespeichert werden, da es dynamisch ist und sich jederzeit ändern können. Der statische Inhalt befindet sich auf einem CDN, so ist nicht von IIS erfüllt.
Edit:
Zu klären, ich verstehe sehr gut, was Cache-Control: private
ist der Unterschied zwischen private
, public
, no-store
usw und wie/Wann Sie zu verwenden sind. Die Frage die ich habe ist, warum Cache-Control: private
standardmäßig Hinzugefügt wird, die von IIS/ASP.NET und wie zu verhindern, dass es standardmäßig Hinzugefügt. Ich verstehe, dass es kann sinnvoll sein, cache für dynamische Seiten, aber in meiner Anwendung, die ich nicht wollen, cache für dynamische Seiten/Antworten. Zum Beispiel, ich will nicht XHR JSON-Antworten im Cache zwischengespeichert werden, da Sie die dynamischen content enthalten. Leider ist der server fügt Cache-Control: private
alle Antworten automatisch, also muss ich manuell überschreiben es überall.
Wie der Fehler reproduziert werden: Öffnen Sie visual studio, und erstellen Sie eine neue ASP.NET Rahmen (ja, framework, Nein, nicht Core. Wir sind nicht in der Lage zu migrieren, die unser system core noch) - Lösung mit einem MVC-Projekt. Starten Sie jetzt das Projekt IIS Express (drücken Sie einfach die play-Taste) und benutzen Sie die F12-devtools im browser zu betrachten, der http-Antwort. Sie werden sehen, dass es enthält Cache-Control: private
. Meine Frage ist, was fügt diese header und wie kann ich verhindern, dass es Hinzugefügt wird standardmäßig?
- Haben Sie sah in mit
meta
- tags? Sie könnenCache-Control
undExpires
auf diese Weise auf der web-Seite der Ebene. - wie kann ein meta-tag gesetzt cache-control von einer ajax-Antwort?
- ajax ist eine andere Geschichte. Was verwenden Sie, um Anträge zu stellen? jQuery hat eine Methode für die Einstellung der cache-control-auf ajax-Anfragen.
- dies ist über die Antwort, nicht die Anforderung. Die Anfrage enthält kein Header mit cache-Informationen
- Es kann hilfreich sein, um zu sehen, die Web -.config-Datei.
<modules runAllManagedModulesForAllRequests="true">
im<system.webServer>
verursachen kann. Wir können auch eincache-control
header-Direktive, um die<customHeaders>
block in<httpProtocol>
. runAllManagedModulesForAllRequests
auf false festgelegt ist, und Iwhen ich<add name="Cache-Control" value="no-store" />
die<customHeaders>
ich am Ende mit den eher lächerlichCache-Control: private,no-store
response-header.- Ich weiß nicht, über ASP.NET so werde ich legen Sie einfach einen Kommentar. Beachten Sie, dass
Cache-Control: public
ist der einzige Weg zu markieren, den cache als öffentliche. Eine Richtlinie wieCache-Control: max-age=3600
ist implizit private. (d.h.private
ist die Standardeinstellung.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen-etwas, um die großen Antworten, gegeben durch die Gemeinschaft;
1. http caching-header attrubute Cache-Control: private Hinzugefügt, die standardmäßig von IIS/ASP.NET ?
Cache-request-Richtlinien
Standard-Cache-Control-Richtlinien, die verwendet werden können, die durch den client in einer HTTP-Anforderung.
Cache-response-Richtlinien
Standard-Cache-Control-Richtlinien, die verwendet werden können, indem die server in eine HTTP-Antwort.
IIS verwendet das sichere und deutlicher/nützliche für default,, die passiert werden private
2. wie zu verhindern, dass es standardmäßig Hinzugefügt?
IIS/asp.net können diese konfiguriert werden, von dem Tag, als es eingeführt wurde, wie diese, ref1, ref2, ref3, ref4 und
System.Web-Namespace
Antwort von RickNZ, kopiert aus https://forums.asp.net
Cache-Control private sagt, dass es OK ist für den client-cache der Seite, Thema zu Ihrem Ablaufdatum. Der Ablauf kann entweder mit Cache-Control: max-age, oder mit einen Expires-HTTP-header. In der default-Fall, die Seite wird festgelegt, dass er sofort, was bedeutet, dass es nicht zwischengespeichert werden.
Einer der Zwecke der Cache-Control: private ist wirklich zu sagen, intermediate proxies, dass Sie sollten nicht den cache der Seite.
BTW, nur weil eine Seite dynamisch ist, bedeutet nicht, dass es sollte nie zwischengespeichert werden. Es gibt viele Fälle, in denen caching eine dynamische Seite angebracht ist. Sie können den cache nicht nur bei den Kunden, sondern auch in proxies und in der server-Ausgabe-cache.
Mehr info:
IIS 7.0 -, IIS hinzufügen "privaten" cache-control, wo das herkommt
Private vs. Public Cache-Control
https://msdn.microsoft.com/en-us/library/ms524721(v=vs. 90).aspx
https://msdn.microsoft.com/en-us/library/system.web.httpcacheability(VS.71).aspx
https://forums.asp.net/t/1443346.aspx?Cache+Steuern+private+
https://forums.asp.net/t/2052325.aspx?Remove+the+private+value+from+the+Cache+Control+in+the+Response+Header
TL; DR
--
Es ist ein sehr einfacher test, um zu überprüfen obigen Aussagen. Eine Aktion erstellen, gibt aktuelle Zeit:
Anzeigen:
Wenn Sie aktualisieren Seiten in abrowser, du wirst sehen, frische Zeit auf jede Anfrage:
Gibt es eine Möglichkeit, um das caching zu verwenden mit ASP.NET MVC-aber man sollte einige Anstrengungen, um es zu aktivieren. Sehen Sie diese Artikel für details.
Wenn Sie trotzdem noch aus irgendeinem Grund ausschließen möchten, die Möglichkeit der Zwischenspeicherung, könnten Sie tun es, indem Sie bestimmte HTTP-Header. Es gibt eine große SO beantworten, dass die Listen, welche Header sollte gesetzt sein:
Könnten Sie Aktion filter festlegen, werden diese Header in jeder ASP.NET Antwort:
In FilterConfig.cs (crated automatisch in ASP.NET MVC-Vorlage):
Hier sind die Ergebnis-Header aus der Antwort:
Wie Sie sehen, es ist keine 'Cache-Control: private-header.
Aber nochmal, ich sehe keinen Grund, warum sollten Sie solche filter für Ihre Anwendung.
Cache-Control: max-age=0
auf den Antrag und umgeht den browser-cache. Wenn Sie stattdessen einen link hinzufügen, der auf Klick gelangen Sie zur selben Seite, dann ist die Anforderung nicht enthaltenCache-Control: max-age=0
und der browser-cache verwendet wird. Das ist das problem ich habeDen IIS 7 und höher (enthalten in der Standard-installation) sendet Sie an Web-clients wie einem der cache-bezogene HTTP-Header.
Beschreibe ich zwei Möglichkeiten, zu deaktivieren, cache-Mechanismus (server-side-Ansatz und client-side-Ansatz) mit Fokus auf server-Seite, basierend auf Ihre Frage:
Server-Side-Ansatz
Befolgen Sie diese Schritte Innerhalb der Internet Information Services (IIS) - Manager zu ändern
Cache-Control
Wert (während ich denke, dies funktioniert für statische Inhalte):Verzeichnis, für die Sie möchten deaktivieren der Zwischenspeicherung.
und klicken Sie dann auf OK.
Eine Möglichkeit ist das kommentieren von deinen controller wie folgt, die ist Recht mächtig und die Antwort-Header enthalten eine
Cache-Control: public
,max-age=0
header.:Können Sie auch Definieren einer cache-Profil in der Anwendung Web.config Datei und in dem Profil gehören
duration
undvaryByParam
Einstellungen:Dann verwenden Sie es, indem Sie die
[OutputCache CacheProfile="nocache"]
vor der Aktion/controller.Beachten Sie, dass es ist eine Konfiguration in web.config - Datei (im Anschluss) die wird nicht verhindern, dass caching. Stattdessen es zeigt nur, dass keine Art von Cache-Mechanismus angewendet werden soll. Nur durch Deaktivierung des output-cache-wir bekommen die Standard-cache-Header verwendet ASP.net MVC fällt zurück
Cache-Control: private
somit wieder öffnen des browser die Möglichkeit, cache-Anfragen.Client-Side-Ansatz
Mit
cache: false
in Ihrem js-Anforderung wie:Für zusätzliche Informationen finden Sie unter:
<clientCache>
<clientCache>
von<staticContent>
wirkt sich nicht auf dynamische Seiten, richtig? Nur statische Dateien?<clientCache>
von<staticContent>
wirkt sich nicht auf dynamische Seiten. Mein Grund ist, dass IIS nicht verstehen, wenn Sie die Arbeit mit der Datenbank, oder nicht!Beantwortung der Frage:
Die Kurze Antwort ist: so, wie andere bemerkt haben, ist dies eine Standard-Einstellung von IIS(7+).
Antwort mehr vollständig: Wenn Sie schauen, um zu kontrollieren oder ändern Sie die Standard-Einstellung
Cache-Control: private
für die Zwischenspeicherung von HTTP-requests, der server-Seite.Davon abhängig ist, dass Ihr die die spezifische version von IIS, die Sie ausführen, und wie die spezifischen, die Sie wollen, um mit Ihren änderungen. Im Allgemeinen jedoch können Sie dies tun, indem Sie Ihre HTTP-Antwort-Header - Schnittstelle (in IIS-Manager => der Ansicht Features - IIS)
Wenn Sie wollen einfach deaktivieren Zwischenspeicherung für eine Website oder Anwendung:
alternativ in der Befehlszeile:
Ausführliche Informationen und Besonderheiten, überprüfen Sie bitte:
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache
Hoffe, das ist das, was Ihr gesucht, cheers.