代码之家  ›  专栏  ›  技术社区  ›  Sean Clark Hess

防止HTTP客户端使用缓存访问服务器(iPhone)

  •  2
  • Sean Clark Hess  · 技术社区  · 14 年前

    好吧,我很困惑。我正在尝试从我的服务器发送魔法头,这将阻止客户端在资源过时之前再次访问服务器。

    我了解etag或上次修改的工作方式(验证)——客户机仍然会访问服务器,服务器需要根据当前值验证日期或etag,以知道是否需要为新的服务器提供服务。

    缓存控制和过期,但是,我认为我不理解。我设置了以下内容:

    Cache-Control: max-age=86400, must-revalidate
    

    无论我做什么,我的客户机(我的浏览器、curl、nsurlconnection)总是在第二个请求时再次访问服务器。这是客户的事吗?为了让客户机在一定时间内使用它的私有缓存,我应该发送什么头文件?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Rob    14 年前

    正如内森在回答中所暗示的那样,客户可以通过 If-Modified-Since 头以确定其缓存是否过时。如果客户收到 304 Not Modified 响应,它将服务于本地缓存之外的内容。

    根据 RFC 2616 (HTTP 1.1规范),存在 must-revalidate Cache-control header强制客户机在从缓存中提供服务之前,与发起服务器重新检查其缓存的状态。

        2
  •  2
  •   Mike    14 年前

    供将来参考-Mark Nottingham为HTTP缓存编写了一个很好的指南:

    http://www.mnot.net/cache_docs/#CACHE-CONTROL

        3
  •  1
  •   Nathan    14 年前

    服务器需要检查 If-Modified-Since 标题和返回A 304 not modified 头,如果它希望浏览器保持缓存。