我想与 304 响应一起发送哪些标头?
当我发送 304 响应时.浏览器将如何解释我与 304 一起发送的其他标头?
When I send a 304 response. How will the browser interpret other headers which I send together with the 304?
例如
header("HTTP/1.1 304 Not Modified");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
这会确保浏览器在 $offset 时间用完"之前不会发送另一个有条件的 GET 请求(也不会发送任何请求)?
Will this make sure the browser will not send another conditional GET request (nor any request) until $offset time has "run out"?
另外,其他标题呢?
我是否应该将这样的标头与 304 一起发送:
Should I send headers like this together with the 304:
header('Content-Type: text/html');
我是否必须发送:
header("Last-Modified:" . $modified);
header('Etag: ' . $etag);
确保浏览器在下一次 $offset 用完"时发送有条件的 GET 请求,还是只是保存旧的 Last Modified 和 Etag 值?
To make sure the browser sends a conditional GET request the next time the $offset has "run out" or does it simply save the old Last Modified and Etag values?
在发送 304 响应标头时我还应该注意其他事项吗?
Are there other things I should be aware about when sending a 304 response header?
推荐答案
这篇博文为了驯服有条件获得"野兽,我帮了很多忙.
This blog post helped me a lot in order to tame the "conditional get" beast.
一段有趣的摘录(部分与 Ben 的回答相矛盾)指出:
An interesting excerpt (which partially contradicts Ben's answer) states that:
如果正常响应包含 ETag 标头,则该标头也必须包含在 304 响应中.
If a normal response would have included an ETag header, that header must also be included in the 304 response.
缓存标头(Expires、Cache-Control 和/或 Vary),如果它们的值可能与先前响应中发送的值不同.
Cache headers (Expires, Cache-Control, and/or Vary), if their values might differ from those sent in a previous response.
这完全符合 RFC2616 秒 10.3.5.
低于 200 个请求...
Below a 200 request...
HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:04:38 GMT
Content-Type: image/png
Last-Modified: Thu, 15 Oct 2009 02:04:11 GMT
Expires: Thu, 31 Dec 2010 02:04:11 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes
Content-Length: 6394
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxxxxxxx
...以及它的最佳有效 304 对应物.
...And its optimal valid 304 counterpart.
HTTP/1.1 304 Not Modified
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:10:35 GMT
Expires: Thu, 31 Dec 2011 16:10:35 GMT
Cache-Control: max-age=315360000
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxx
请注意,Expires
标头最多为 Current Date + 一年
,根据 RFC-2616 14.21.
Notice that the Expires
header is at most Current Date + One Year
as per RFC-2616 14.21.
相关文章