2013-07-23 3 views
12

Wir haben kürzlich damit begonnen, einige unserer ASP.NET MVC-Websites von unserer eigenen verwalteten Umgebung zu Azure zu verlagern. Eines der Probleme, die wir gesehen haben, ist, dass das clientseitige Caching bei der Bereitstellung dynamisch erstellter Inhalte nicht ordnungsgemäß funktioniert. Insbesondere werden die cache-bezogenen Header, die der HTTP-Antwort im Code hinzugefügt werden, entfernt.Von Azure gehostete ASP.NET MVC-Site löscht Client-Cache-bezogene HTTP-Header

Zum Beispiel werden die folgenden Header auf der alten Umgebung zurückgeführt, um den Kunden zu beraten, dass der Inhalt im Cache gespeichert werden können:

Cache-Control:   public, max-age=31533144 
Content-Disposition: attachment; filename=picture.png 
Content-Length:   64326 
Content-Type:   image/png 
Date:     Tue, 23 Jul 2013 15:44:57 GMT 
Etag:     "845D3DD630A7AEF5B68EA7A09B670A4D" 
Expires:    Fri, 23 Aug 2013 14:57:22 GMT 
Last-Modified:   Tue, 23 Jul 2013 14:57:22 GMT 
Server:     Microsoft-IIS/7.5 

Aber auf Azure, die folgenden Header zurückgegeben statt:

Content-Disposition: attachment; filename=picture.png 
Content-Length:   64326 
Content-Type:   image/png 
Date:     Tue, 23 Jul 2013 15:44:57 GMT 
Server:     Microsoft-IIS/8.0 
X-Powered-By:   ARR/2.5, ASP.NET 

Wie Sie sehen können, die Cache-Control, Etag, Expires und Last-Modified Header fallen gelassen wurden.

Ich habe eine Reihe von Vorschlägen bezüglich der Caching von statischen Inhalten gesehen, aber ich glaube nicht, dass diese in diesem Fall helfen werden. Ist es ein Fall, dass die Struktur des Azure-CDN das Caching auf diese Weise verhindert? Sollen stattdessen Azure-Blobs verwendet werden? Gibt es eine grundlegende Konfigurationsänderung, die möglicherweise übersehen wurde?

Vielen Dank im Voraus

+0

Ich habe genau das gleiche Problem. Das Setzen der Header (zB Response.Cache.SetExpires) funktioniert lokal, wird aber beim Deployment entfernt ... – Gareth

+0

Ich bin mir nicht sicher, aber laut diesem msdn Artikel http://msdn.microsoft.com/en-us/library /windowsazure/gg680299.aspx 'Wenn Sie Anwendungsinhalte programmgesteuert zwischenspeichern möchten, stellen Sie sicher, dass der Inhalt als zwischenspeicherbar gekennzeichnet ist, indem Sie HttpCacheability auf Public festlegen.' –

+4

Hey, nur damit ich ein wenig besser verstehen kann - verwenden Sie Azure-Websites oder Azure-VMs? Wie konfigurieren Sie das HTTP-Caching? In der web.config über IIS programmgesteuert (OutputCache)? – Deano

Antwort

1
X-Powered-By:   ARR/2.5, ASP.NET 

ARR steht für Request Routing-Anwendung.

Gehen Sie zu inetmgr UI und klicken Sie auf den Servernamen und Sie finden die Option 'Application Request Routing Cache'.

Sie sehen "Cache-Konfiguration", prüfen Sie die Optionen dort. Überprüfen Sie dort auch "Kontrollregeln für den Cache". Klicken Sie auf "Regel hinzufügen ..." und probieren Sie es aus.

0

Azure Websites Website hinter ARR. ARR wird einige HTTP-Header löschen und eigene hinzufügen, es ist nicht etwas, das Sie direkt steuern können. Eine bessere Lösung für Ihr Problem könnte die Verwendung von Azure CDN für statische Inhalte sein. Dies berücksichtigt und verwendet die Cache-Steuerkopfzeilen. Sie können ein CDN auf einem Blobspeichercontainer ausführen.

Verwandte Themen