ASP.NET应用程序中的Http 1.1 Headers配置

时间:2016-01-20 14:33:05

标签: asp.net web http-headers request

我这里有小问题。这就是我的web.config的样子:

<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

因此pragma中的值是重复的,在某些响应中,Cache-Control具有&#34; public&#34;在开头像:

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

有没有办法只从我的web.config设置标题?

另一个问题是有没有办法在主响应中设置标题但在响应是.css和.js文件时禁用它们?我希望它们被缓存。

3 个答案:

答案 0 :(得分:1)

我认为Cache-Control标头也是由ASP.NET的Output Caching基础设施设置的。

我不建议通过手动设置Cache-Control标头来对抗ASP.NET ...您希望ASP.NET的输出缓存基础结构为您完成。可以在web.config的outputCache元素中配置输出缓存。有关配置输出缓存的更多信息,请参见here

你可能不需要过多担心Pragma标题(除非你期望从1990年开始有很多pre-HTTP 1.1客户端!)。

静态js / css内容的标头通常由IIS直接处理,因为ASP.NET(通常)不提供静态内容。 This discussion会让你指向正确的方向。

答案 1 :(得分:1)

首先 - 重复不应成为问题。

HTTP RFC2616说:

  

可能存在具有相同字段名称的多个消息头字段   在消息中,当且仅当该标头的整个字段值   字段被定义为以逗号分隔的列表[即,#(值)]。它必须   可以将多个标题字段合并为一个   “field-name:field-value”对,不改变语义   消息,通过将每个后续字段值附加到第一个,每个   用逗号分隔。头字段具有相同的顺序   因此,接收字段名称对于解释是重要的   组合字段值,因此代理不得改变   转发消息时这些字段值的顺序因此,多个   具有相同名称的标题是正确的(www-authenticate就是这种情况)if   整个字段值定义为以逗号分隔的值列表。

您可以找到更多信息here

对于具有特定文件扩展名的文件的缓存设置,您可以查看IIS中的输出缓存部分。

答案 2 :(得分:0)

我为我找到了解决方案。

我创建了attriburte并将其添加到基本控制器:

[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文件都被缓存,但我的请求在缓存中不可见:)