我在发布网站上启用了 blobcaching。
对于经过身份验证的用户,Cache-Control HTTP header 中的 max-age 属性根据 web.config 中 blobCache 元素中的设置正确设置,对于匿名用户,它设置为 0。 这会导致浏览器发出大量 304 请求来尝试查看图像是否已更改,并对性能产生负面影响。 这仅是“/Style Library”中的文件的问题。
博客中有一些提到这个问题,但到目前为止还没有找到解决方案。有什么方法可以修复此问题或通过其他方式强制设置此 header ?我已经尝试实现一个 HTTP 处理程序来执行此操作,但它仍然显示为 0。
最佳答案
如果您为整个网站设置缓存,然后在您不希望匿名用户获取缓存内容的页面上添加类似以下内容,情况会怎样:
protected override void OnInit(EventArgs e)
{
if (user.IsAnonymous())
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);
}
base.OnInit(e);
}
这会产生这样的结果:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Length: 15965
Content-Type: text/html; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 03 Aug 2009 01:07:26 GMT
这应该使网页不被缓存,但应用于图像、CSS、JS 等的任何缓存都应该保留。如果图像没有应用缓存 header ,那么听起来您必须编写一个自定义 http 处理程序来拦截对这些图像的请求,然后应用正确的缓存 header 以及在每个页面上设置哪些页面您不想缓存。
关于asp.net - 对于匿名用户,Cache-Control/max-age 始终设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1162377/