我是HTTP缓存的新手,真的需要一些帮助...
我看到很多人在向服务器发送XHR时设置了"Cache-Control"
标头。
这样做的目的是什么?请求标头是否也需要缓存?
我为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
根本没有更新。
答案 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图像的时间并不比服务整个图像少得多。