Safari不发送"If-Modified-Since"和"If-None-Match"标头

bas*_*ebe 12 php safari etag last-modified http-headers

我正在使用PHP生成动态内容.

我正在发送以下HTTP标头:

HTTP/1.1 304 Not Modified
Date: Sun, 09 Dec 2012 17:24:41 GMT
Server: Apache
Connection: keep-alive, Keep-Alive
Keep-Alive: timeout=1, max=100
Etag: "237f43b800e655dbe6567f7d32d34c99"
Expires: Sun, 16 Dec 2012 17:24:41 GMT
Cache-Control: max-age=604800
Vary: Accept-Encoding
Run Code Online (Sandbox Code Playgroud)

我后来检查Etag header('HTTP/1.1 304 Not Modified')是否匹配发送一个.这与Chrome和Firefox完美配合.但是,Safari(版本6.0.2)不会发送"If-Modified-Since"和"If-None-Match"标头.这是Safari在第二页上发送的Request-Header命中:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

在该页面上链接的所有其他文件在适当的时候接收正确的Request-Headers和Safari使用的缓存文件或304.

为什么不向Safari发送正确的Request-Header?我能改变什么?

谢谢!

Chr*_*ing 4

如果-修改-自

If-Modified-Since的注释警告不要使用与Last-Modified

注意:如果客户端在 If-Modified-Since 标头中使用任意日期,而不是从 Last-Modified 标头中获取同一请求的日期,则客户端应该意识到该日期是按照服务器的理解进行解释的。的时间。

您的回复不包含Last-Modified,但即使包含,规范中也没有任何内容表明用户代理必须或应该发送 If-Modified-Since ,他们只是可以。

如果-无-匹配

至于为什么 Safari 不发送If-None-Match 则让我困惑;你的电子标签看起来有效。

一般情况下强制执行缓存

一般来说,规范中没有任何内容说您必须缓存,只是当您这样做时,您必须遵守Cache-Control。所以这是一种不对称的关系,您可以强制(透明)缓存与源服务器重新检查,但作为源服务器,您不能强制用户代理进行缓存。

我能做什么呢?

Safari 只是部分免费软件。如果添加 Last-Modified 没有帮助,那就没什么了。