Можно ли заставить Safari использовать условное получение HTTP для первого документа?
Я пытаюсь добавить функциональность HTTP Conditional Get на первую страницу мобильного сайта. Однако то, что я вижу, заставляет меня думать, что 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, и, как и следовало ожидать, затем полностью перезагружает страницу с сервера. Я вижу это в Safari 6.0.3 на моем MacBook Pro, Safari в симуляторе iOS с iPhone с iOS 6.1 и на iPad Mini с iOS 6.1.3.
И что действительно странно в этом, так это то, что Safari явно поддерживает условное получение для последующих запросов (CSS, JS, изображений и т. Д.) - я ясно вижу их после прохождения основной HTML-страницы. Но я не могу понять, как заставить Safari сделать запрос условного получения для первого документа.
Итак, я думаю, мой вопрос состоит из двух частей:
Я что-то упускаю из виду? Потому что на самом деле кажется немного сумасшедшим, что Safari будет действовать так по замыслу. Но, возможно, я ожидаю слишком многого от Apple здесь.
Если я не пропускаю что-то очевидное, кто-нибудь знает какие-нибудь обходные пути?