启用了gzip的NSURLCache和ETag无效

时间:2014-11-06 15:05:36

标签: ios caching ios8 gzip etag

我试图让NSURLCache在iOS8上工作,但是在使用ETag和gzip压缩时它似乎被打破了。我正在使用启用了gzip压缩的NGINX作为瘦Web服务器的代理。以下响应未被NSURLCache缓存:

HTTP/1.1 200 OK
Server            nginx/1.7.6
Date              Thu, 06 Nov 2014 14:28:50 GMT
Content-Type      application/json;charset=utf-8
Transfer-Encoding chunked
Connection        keep-alive
Vary              Accept-Encoding
Cache-Control     private, max-age=0
ETag              W/"d693ff4d26d0e7f25498ecb89d8796cd41e9da4f"
Content-Encoding  gzip

当我在NGINX配置中禁用gzip时,请求被正确缓存:

HTTP/1.1 200 OK
Server         nginx/1.7.6
Date           Thu, 06 Nov 2014 14:26:40 GMT
Content-Type   application/json;charset=utf-8
Content-Length 311433
Connection     keep-alive
Cache-Control  private, max-age=0
ETag           W/"d693ff4d26d0e7f25498ecb89d8796cd41e9da4f"

我尝试将Cache-Control设置为public,但它没有帮助。

启用gzip的我的设置在iOS7上完美运行。

有谁知道我做错了什么?或者我应该为此提交雷达?

提前致谢

1 个答案:

答案 0 :(得分:0)

对不起,无法发表评论,缺少声誉。

您可以尝试删除ETag中所有content://com.google.android.apps.docs.storage/ 个实例。这就是我的自定义缓存机制的工作方式。实际上,我在寻找一种告诉-gzip使用gzip ETag的正确方法。感觉就像是一种解决方法。