代码之家  ›  专栏  ›  技术社区  ›  Keith

为什么我的ASPX页面没有缓存在客户机上?

  •  5
  • Keith  · 技术社区  · 15 年前

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

    所以在 .aspx 我有一页:

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

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

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

    这将导致文件在服务器和客户机(而不是中间代理)上缓存一天。

    响应头似乎正确:

    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未修改 没有主体-告诉浏览器重新使用已经下载的内容。

    如何确保它返回 HTTP 304 当内容没有改变时?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Julian Reschke    15 年前

    1)变化:*会导致某些浏览器(如IE)无法缓存。变化:用户代理可能工作得更好(不确定)。

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

    推荐文章