【问题标题】:IIS7: set "no-cache" for all aspx pages but not images/css/jsIIS7:为所有 aspx 页面设置“无缓存”,但不是图像/css/js
【发布时间】:2011-01-02 15:18:24
【问题描述】:

我不想在任何地方缓存我的 aspx 页面。出于某种原因,IE 会忽略从我的母版页设置的元标记

<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

我正在尝试查看是否可以将我的 Http 响应标头设置为“Cache-Control”-“no-cache”。设置类似

HttpContext.Current.Response.Headers.Add("Cache-Control", "no-cache");
   HttpContext.Current.Response.Headers.Add("Exipres", DateTime.Now.AddDays(-1).ToShortDateString());

在每一页都会很痛苦。我在想是否无论如何我们可以在 IIS7 中设置它(将此标头添加到 aspx 页面,但不是图像/css/js)。有可能吗?

编辑:根据http://technet.microsoft.com/en-us/library/cc753133%28WS.10%29.aspx 中的建议,添加自定义 http 响应标头会将标头添加到包括 js、css、图像在内的所有文件中。所以在这里添加“Cache-Control”、“no-cache”也不起作用

Edit2:我正在考虑添加一个 httpmodule 。类似于http://blogs.technet.com/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx 的东西。有什么建议吗?

【问题讨论】:

    标签: asp.net iis caching http-headers


    【解决方案1】:

    http://technet.microsoft.com/en-us/library/cc770661(WS.10).aspx

    默认情况下 IIS 只缓存静态内容;如果它已经在缓存非静态内容,则必须进行调整。

    【讨论】:

    • 我不希望它缓存 aspx,但希望它缓存(在客户端)图像、css 和 js。我想在 IIS 中将响应标头添加到 not 缓存 aspx,而是缓存图像、js、css
    • IIS 默认不缓存 aspx - 这就是我所说的。如果它正在缓存 aspx 页面,则必须检查相同的设置以确保对动态页面禁用缓存。
    【解决方案2】:

    如果您的网站使用 MasterPage,您可能需要考虑将以下响应标头添加到其 Page_Load 事件中:

    protected void Page_Load(object sender, EventArgs e)
    {
    Response.AddHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
    }
    

    由于您的 .js 文件不会使用 MasterPage,因此浏览器应保存对其缓存的引用。

    上面的例子是我使用的,它在 Firefox3、IE7 和 Chrome7 下运行良好。请注意,上面的响应标头是我为缓存控制添加的唯一内容,它完成了这项工作。但是,我经常在其他网站上看到 PragmaExpires 响应标头。

    例如,以下是 Gmail 中使用的响应标头:

    内容类型:文本/html; charset=UTF-8
    缓存控制:无缓存、无存储、max-age=0、必须重新验证
    编译指示:无缓存
    过期:格林威治标准时间 1990 年 1 月 1 日星期五 00:00:00

    日期:格林威治标准时间 2010 年 11 月 2 日星期二 16:38:15
    x-dns-prefetch-control:关闭
    内容编码:gzip
    传输编码:分块
    X-Content-Type-Options: nosniff
    X 框架选项:SAMEORIGIN
    X-XSS-防护:1;模式=阻止
    服务器:GSE 服务器:GSE

    我不确定这些是否用于旧版浏览器和/或其他新版浏览器。

    我更喜欢用最少的代码来解决问题,而且我(还)从来没有遇到过顶部提到的Response.AddHeader 不够用的情况。

    【讨论】:

      【解决方案3】:

      防止任何浏览器缓存您的页面的一个绝对明确的方法是添加一个设置为随机数的查询字符串变量,这样您的链接将始终以“?ran=”结尾。我过去曾在有限的基础上这样做过。

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2011-07-15
        相关资源
        最近更新 更多