HTTP缓存控制

时间:2011-01-22 11:19:23

标签: javascript firefox http-headers cache-control xmlhttprequest

我是HTTP缓存的新手,真的需要一些帮助...

  1. 我看到很多人在向服务器发送XHR时设置了"Cache-Control"标头。 这样做的目的是什么?请求标头是否也需要缓存?

  2. 我为XHR设置了此标头: Cache-Control max-age=30, must-revalidate,但是当我在30秒后刷新(甚至强制刷新)时,Firefox 3.6.13似乎不会重新验证文件。服务器中也没有访问日志。这是因为我没有在Apache中为文件设置expire头吗?

    来自Firebug日志:

      

    回复标题
      日期星期六,2011年1月22日09:59:21 GMT
      Last-Modified星期四,2011年1月20日09:05:11 GMT
      Etag“3e000000023ca7-20d-49a436e5b3413”

         

    请求标题
      保持活力115
      连接保持活着
      内容类型应用程序/ xml
      Cache-Control max-age = 30,必须重新验证

    该文件已被修改,但Firefox甚至没有进行条件获取。 <{1}}和Response Date根本没有更新。

2 个答案:

答案 0 :(得分:2)

客户端也可以发送Cache-Control指令。看到:   http://tools.ietf.org/html/draft-ietf-httpbis-p6-cache-12#section-3.2

不幸的是,浏览器在XHR设置时不会(尚)尊重它们,但通常会干预代理缓存。

答案 1 :(得分:1)

服务器需要设置重新验证指令,而不是客户端。

源控制内容是否以及如何cacehd或不缓存,客户端决定是否尊重它。

must-revalidate只表示发送头请求,如果etag不同,则刷新资源。对于大文件来说,这是一种非常常见的做法,因为一旦内容发生变化,电子标签通常会发生变化。

对于小文件,但您可能希望根本没有任何请求,但缩短时间。那么必须重新验证是错误的。 服务器负载和消耗头部请求到7kb图像的时间并不比服务整个图像少得多。