asp.net - 为什么我的 aspx 页面没有缓存在客户端上?

标签 asp.net asp.net-mvc http iis-7 caching

我有一个动态生成的 CSS 文件。它相当大,并且针对不同的浏览器具有不同的内容。它很少改变。

所以在 .aspx 页面的顶部我有:

<%@ OutputCache Duration="86400" 
                Location="ServerAndClient" 
                VaryByParam="none" 
                VaryByCustom="browser" %>

我有一个针对生成动态图像的 MVC 操作的类似指令:

[OutputCache(Duration = 86400, 
             VaryByParam = "none", 
             Location = OutputCacheLocation.ServerAndClient)] 

这应该会导致文件在服务器和客户端(但不是中间代理)上缓存一天。

响应 header 似乎是正确的:

HTTP/1.1 200 OK
Cache-Control: private, max-age=83831
Content-Type: text/css; charset=utf-8
Expires: Wed, 09 Jun 2010 08:52:45 GMT
Last-Modified: Tue, 08 Jun 2010 08:52:45 GMT
Vary: *
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 08 Jun 2010 09:35:34 GMT
Content-Length: 70073

服务器端缓存工作 - 进一步的请求不会再次执行代码。

然而,客户端缓存以两种不同的方式被破坏:首先在每个页面上再次请求内容,尽管它应该被缓存。

为什么浏览器会再次请求内容?

其次,当服务器再次被要求提供内容时,它会返回一个 HTTP 200 以及整个内容。它应该返回没有正文的 HTTP 304 Not Modified - 告诉浏览器重新使用它已经下载的内容。

我如何确保它在内容未更改时返回 HTTP 304

最佳答案

1) Vary: * 会导致某些浏览器,比如IE,不缓存。变化:User-Agent 可能工作得更好(不确定)。

2) WRT 200 与 304:客户端是否发送 If-* header ?

关于asp.net - 为什么我的 aspx 页面没有缓存在客户端上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996218/

相关文章:

javascript - 动态图像 slider 到 asp.net mvc c# 中的动态卡片

c# - 如何让 asp.net 身份注销工作?

javascript - https 请求在 Node.js 中不起作用

python - BaseHTTPRequestHandler 在由 pythonw.exe 3.1 运行时挂起

c# - 关于new { }的使用问题

mysql - 逐字分割mysql列

javascript - 如何从代码隐藏中调用 IFrame 中的 JS 函数

javascript - AutoPostBack ="True"时 DropDownList 未触发 onbeforeunload

c# - 使用从软件应用程序保存/另存为将文件上传到网站

java - Java 上用于 HTTP 请求的最佳现代 Web 服务器引擎或框架?