0

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

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

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

    来自 Firebug 日志:

    响应标头
    日期 2011 年 1 月 22 日星期六 09:59:21 GMT
    最后修改时间 2011 年 1 月 20 日星期四 09:05:11 GMT
    Etag "3e000000023ca7-20d-49a436e5b3413"

    Request Headers
    Keep-Alive 115
    Connection keep-alive
    Content-Type application/xml
    Cache-Control max-age=30, must-revalidate

    该文件已被修改,但 Firefox 甚至不做条件获取。Response Date并且Last-Modified根本不更新。

4

2 回答 2

2

客户端也可以发送 Cache-Control 指令。参见: https ://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p6-cache-12#section-3.2

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

于 2011-02-03T00:02:54.433 回答
1

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

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

must-revalidate 只是意味着发送了一个头请求,如果 etag 不同,则刷新资源。对于大文件,这是一种非常常见且不明智的做法,因为电子标签通常会随着内容的变化而变化。

但是,对于小文件,您可能希望根本没有任何请求,但需要更短的时间。那么 must-revalidate 是错误的。服务器负载及其对 7kb 图像的头部请求所消耗的时间并不比提供完整图像少多少。

于 2011-01-22T12:15:01.570 回答