2011-10-17 67 views
3

歷史:
出於安全的考慮,我們的企業希望通過增加HTTP標頭IIS禁用緩存。無法覆蓋IIS使用PreSendRequestHeaders()HTTP緩存頭

截止日期:-1
雜注:無緩存
緩存控制:無緩存,無店鋪

添加這些頭引起MIME 「應用程序/ vnd.ms - Excel中」 響應類型以故障轉移SSLIE6。微軟認爲這是一個錯誤(http://support.microsoft.com/kb/323308),他們的解決方案也可以工作。然而,這個解決方案必須作爲整個組織的補丁,並面臨來自更高管理層的阻力。

問題:
同時,我們正在努力尋找通過重寫IIS設置的HTTP標有MIME類型 「application/vnd.ms-Excel的」 頁面使用替代品的HttpModules PreSendRequestHeaders()功能

//this is just a sample code 
public void Init(HttpApplication context) 
     { 
      context.PreSendRequestHeaders += new EventHandler(context_PreSendRequestHeaders); 

     } 
protected void context_PreSendRequestHeaders(object sender, EventArgs e) 
     { 
      HttpApplication application = (HttpApplication)sender; 
      if(application.Response.ContentType == "application/vnd.ms-excel; name=DataExport.xls") 
      { 
       application.Response.ClearHeaders(); 
       application.Response.ContentType = "application/vnd.ms-excel; name=DataExport.xls"; 
       application.Response.AddHeader("Content-Transfer", "Encoding: base64"); 
       application.Response.AddHeader("Content-Disposition", "attachment;filename=DataExport.xls"); 
       application.Response.AddHeader("cache-control","private"); 
      } 
     } 

即使在使用ClearHeaders()清除標頭後,IIS仍會在發送響應之前附加緩存標頭。

問題:
是採用PreSendRequestHeaders()函數錯誤ClearHeaders()的這種做法? 使用ASP.NET 1.1中提供的庫,它們是否可以替代緩存頭(Expires,Pragma,cache-control)?

其他:
我們使用
瀏覽器:IE6 SP 3
服務器:IIS 6
平臺:.NET 1.1

回答

1

這將成爲與IIS更容易使用7.5+使用URL Rewrite extention並添加一個出站規則以去除Cache-Control頭中的「no-store」值和Pragma頭。此規則集會做的伎倆:

<outboundRules> 
    <rule name="Always Remove Pragma Header"> 
     <match serverVariable="RESPONSE_Pragma" pattern="(.*)" /> 
     <action type="Rewrite" value="" /> 
    </rule> 
    <rule name="Remove No-Store for Attachments"> 
     <conditions> 
      <add input="{RESPONSE_Content-Disposition}" pattern="attachment" /> 
     </conditions> 
     <match serverVariable="RESPONSE_Cache-Control" pattern="no-store" /> 
     <action type="Rewrite" value="max-age=0" /> 
    </rule> 
</outboundRules> 
1

請參閱:

Cache-control: no-store, must-revalidate not sent to client browser in IIS7 + ASP.NET MVC

您必須使用以下調用序列內的PreSendRequestHeaders處理程序正確地設置無緩存頭,否則緩存控制報頭稍後被覆蓋:

Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.AppendCacheExtension(「no-store,must-revalidate」); Response.AppendHeader(「Pragma」,「no-cache」); 響應。AppendHeader(「Expires」,「0」);