2016-01-20 22 views
1

我在這裏有一個小問題。這是我的web.config看起來像:ASP.NET中的HTTP 1.1頭配置應用程序

<add name="Cache-Control" value="no-cache, no-store, must-revalidate, private" /> 
<add name="Pragma" value="no-cache" /> 

但是,當我檢查ZAP工具,我有這樣的事情:

Cache-Control: no-cache,no-cache, no-store, must-revalidate, private 
Pragma: no-cache,no-cache 

所以在編譯的值複製,還有些反應的cache控制了「公」在像開頭:

Cache-Control: public, no-cache, no-cache, no-store, must-revalidate, private 

有沒有辦法從我的web.config僅設置標題?

另一個問題是,有什麼方法可以在主響應中設置標題,但在響應是.css和.js文件時禁用它們?我希望他們被緩存。

回答

0

我找到了我的解決方案。

我創建attriburte並將其添加到基礎CONTROLER:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public sealed class NoCacheAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     filterContext.HttpContext.Response.Cache.AppendCacheExtension("no-store, must-revalidate, private"); 
     base.OnResultExecuting(filterContext); 
    } 
} 

[NoCache] 
public class BaseController : Controller 

現在我所有的.js文件,名爲.css,.png或.jpg文件緩存,但我的請求不在緩存中可見:)

1

我認爲Cache-Control頭也是由ASP.NET的Output Caching基礎設施設置的。

我不會建議通過手動設置緩存控制標題與ASP.NET作戰...您希望ASP.NET的輸出緩存基礎結構爲您執行此操作。輸出緩存可以在web.config的outputCache元素中配置。有關配置輸出緩存的更多信息,請參見here

你可能不需要太擔心Pragma標題(除非你預計會有很多來自20世紀90年代的HTTP 1.1客戶端)。

靜態js/css內容的標題通常由IIS直接處理,因爲靜態內容不是(通常)由ASP.NET提供的。 This discussion會讓你指出正確的方向。

1

首先 - 重複不應該是一個問題。

HTTP RFC2616說:

多幅具有相同字段名的消息的報頭字段可以出現 在消息當且僅當該頭 字段整個字段值被定義爲逗號分隔列表[即,#(值)]。它必須 可以通過將每個後續字段值附加到第一個,每個 分隔的一個 「字段名稱:字段值」對,而不更改消息的語義,可以將多個標題字段組合到一個 「逗號。因此,接收到字段名相同的標題字段的順序對組合字段值的解釋 有意義,因此當轉發消息時,代理不得改變這些字段值的順序。因此,多個 具有相同名稱的標頭是可以的(www認證就是這種情況)如果 整個字段值被定義爲逗號分隔的值列表。

更多信息你可以找到here

當涉及到具有特定文件擴展名的文件的緩存設置時,您可以查看IIS中的輸出緩存部分。

相關問題