Caching ASP.NET Webforms-关闭缓存,但仅适用于;“第页”;,不适用于静态内容

Caching ASP.NET Webforms-关闭缓存,但仅适用于;“第页”;,不适用于静态内容,caching,webforms,asp.net-4.0,cache-control,Caching,Webforms,Asp.net 4.0,Cache Control,对于我们的一个项目,我们的客户在ASP.NET Webforms 4.0应用程序中运行了一个“笔测试”,发现了一些他们希望我们解决的安全问题 到目前为止,引起最多讨论的一个发现是,该应用程序允许缓存页面和内容,这可能会导致未经授权的用户看到他们不应该看到的数据(这就是“笔测试”发现的大致意思) 建议的“修复”是将缓存控制和pragmaHTTP头设置为无缓存,以避免此类缓存,方法是将其添加到myweb.config: <system.webServer> <httpPro

对于我们的一个项目,我们的客户在ASP.NET Webforms 4.0应用程序中运行了一个“笔测试”,发现了一些他们希望我们解决的安全问题

到目前为止,引起最多讨论的一个发现是,该应用程序允许缓存页面和内容,这可能会导致未经授权的用户看到他们不应该看到的数据(这就是“笔测试”发现的大致意思)

建议的“修复”是将
缓存控制
pragma
HTTP头设置为
无缓存
,以避免此类缓存,方法是将其添加到my
web.config

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate, private"/>
            <add name="Pragma" value="no-cache"/>
            <add name="Expires" value="-1"/>
        </customHeaders>
    </httpProtocol>
</system.webServer>

但我有点不愿意在全局范围内这样做——这是否也会关闭应用程序的任何图像、Javascript和CSS文件缓存?这可能会对站点性能产生重大的负面影响-不是吗

我能在“中间”做点什么吗?防止实际的ASP.NET页面被缓存,以及它们提供的数据,但仍然保持静态内容的缓存?如果可能的话:我必须设置什么标题才能实现这一点


谢谢

如果您正在为站点使用母版页,或者扩展了page类并使用扩展page类创建了页面,那么您可以将代码放入相应的page_Load事件中

Response.Cache.SetCacheability(HttpCacheability.NoCache); //Cache-Control : no-cache, Pragma : no-cache
Response.Cache.SetExpires(DateTime.Now.AddDays(-1)); //Expires : date time
Response.Cache.SetNoStore(); //Cache-Control :  no-store
Response.Cache.SetProxyMaxAge(new TimeSpan(0, 0, 0)); //Cache-Control: s-maxage=0
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);//Cache-Control:  must-revalidate