So habe ich eine ASP.NET MVC 5-Site auf IIS 10 lokal auf meinem Windows 10-Laptop mit den folgenden Einstellungen in web.config.ASP.NET MVC + IIS 10 - Cache-Control immer privat
Zusammengestellt in Release-Konfiguration, die Debug-Modus aus:
<compilation debug="false" targetFramework="4.5.2" />
und einen Cache-Control-Header max-age mit:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>
Aber egal, was ich tue, ich sehe cache- immer Steuerung: privat
Ich habe alle Module ausgeschaltet, die ich hatte und führte eine fehlgeschlagene Trace-Anfrage, die zeigte der Header gesetzt wird:
Aber ich kann nicht die Spur etwas über diese ManagedPipelineHandler die das Modul der Header gesetzt, in dem zu sein scheint.
Ich habe versucht, Hinzufügen von Cache-Control als benutzerdefinierte Header:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<remove name="Cache-Control" />
<add name="Cache-Control" value="public, max-age=1800, must-revalidate" />
</customHeaders>
</httpProtocol>
Aber dies nur auf die bestehenden privaten Rahmen angefügt:
HTTP/1.1 200 OK
Cache-Control: private,public, max-age=1800, must-revalidate
Content-Type: text/html; charset=utf-8
Meine runAllManagedModulesForAllRequests Einstellung falsch ist, welche anderen Stellen haben vorgeschlagen könnte die Ursache sein.
Ich weiß, ich kann diesen Header in Code festlegen, aber ich würde gerne wissen, was & warum zwingt die "private" -Einstellung.
Kann jemand beraten?
UPDATE
Something is forcing responses to have cache-control: private in IIS7
So ist das Standardverhalten für .NET, wenn kein Ausgabecache für eine Anforderung verwendet es (und Sie haben Ausgabe-Cache aktiviert ist). Wenn Sie das Attribut sendCacheControlHeader in web.config für & auf "false" setzen, wird der Header "Cache-Control: private" nicht angezeigt.
Seltsamer noch bekommen Sie nicht die richtigen Cache-Control-Header basierend auf dem Knoten - aber Sie steuern die Header über den Abschnitt, so funktioniert dies jetzt:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Cache-Control" value="max-age=30,public" />
</customHeaders>
</httpProtocol>
Sie sagen dann, dass die "Standard" MVC Einstellung überschreibt die vollkommen legitime system.webserver Einstellung? Das scheint einfach nicht richtig zu sein. – Neil