是否可以让Safari使用HTTP Conditional Get获取第一个文档?

时间:2013-04-24 21:21:46

标签: http http-headers safari http-etag

我正在尝试将HTTP条件获取功能添加到移动网站的第一页。但是,我所看到的是让我认为Safari只是不支持HTTP Conditional Get来加载它的第一个文档。

我通过创建一个新的Rails 3.2.13应用程序对此进行了测试,其中一个操作如下所示:

def index
  last_modified = Date.today
  etag_obj = "something something"
  fresh_when last_modified: last_modified, etag: etag_obj, public: false
end

请求标头包含Etag和Last-Modified,如预期的那样:

[cache_test]$ curl -I http://localhost:5000/test
HTTP/1.1 200 OK 
Etag: "79b547467286b3e20fad13f73fc1bf78"
Last-Modified: Wed, 24 Apr 2013 00:00:00 GMT
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=0, private, must-revalidate
X-Ua-Compatible: IE=Edge
X-Request-Id: 8ace0b71533b2bc036bd84b12289cda6
X-Runtime: 0.012269
Server: WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)
Date: Wed, 24 Apr 2013 21:06:49 GMT
Content-Length: 0
Connection: Keep-Alive
Set-Cookie: _cache_test_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTM0NWRjNDgyZGQwNWJmMGZkNmIzNmY4NjVmNWEzMDkwBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMTlYK0VrMERGdEsvOVlzbVJ5N1FPQlZXVDRwak9zQ3QzS3ZXZ1pvbnJocjg9BjsARg%3D%3D--0902ae8a505527bd49d969753ddf1d2bd4c716eb; path=/; HttpOnly

在Firefox 20.0和Chrome 26.0.1410.65上,这就像我预期的那样:在第二次加载时,浏览器在请求中发送If-Modified-Since和If-None-Match,并收到304 Not Modified。

然而,它并没有在Safari上执行此操作。在Safari上,它既不发送If-Modified-Since也不发送If-None-Match,并且正如您所期望的那样,它将完全从服务器重新加载页面。我在MacBook Pro上的Safari 6.0.3上看到这个,在iOS模拟器中的Safari使用带有iOS 6.1的iPhone,以及带有iOS 6.1.3的iPad Mini。

这真的很奇怪,Safari显然支持Conditional Get用于后续请求(CSS,JS,图像等) - 在主HTML页面出现后我可以清楚地看到它们。但我不能为我的生活弄清楚如何让Safari为第一个文件提出条件获取请求。

所以,我想我的问题分为两部分:

  1. 我错过了一些明显的东西吗?因为它实际上看起来有点疯狂,Safari会按照设计的方式行事。但也许我在这里期待Apple太多了。

  2. 如果我没有遗漏任何明显的事情,是否有人知道任何变通办法?

0 个答案:

没有答案