2017-08-08 1 views
1

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:

enter image description here

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> 

Antwort

0

Caching in diesem Zusammenhang gesteuert wird durch .NET und MVC-Anwendung, was den "privaten" Wert antreibt. Um diesen Wert zu steuern, würden Sie normalerweise Controller oder Aktionen mit entsprechendem Caching-Verhalten dekorieren:

  • [OutputCache (...)]> Spezifische Kontrolle der Ausgabe-Cache-Steuerung wie Dauer in Sekunden, Varianzen durch Kodierung, Parameter, Header oder andere Werte, Position oder andere Konfigurationsoptionen
  • Wenn kein Cache-Wert gesetzt ist, der "private" -Wert ist der Standardwert, der von MVC verwendet wird. Wenn Sie eine Cache-Einstellung global anwenden möchten, können Sie einen Filter erstellen und ihn während der Anwendungsinitialisierung in den globalen Filtern anwenden.

    +0

    Sie sagen dann, dass die "Standard" MVC Einstellung überschreibt die vollkommen legitime system.webserver Einstellung? Das scheint einfach nicht richtig zu sein. – Neil