当前位置:  开发笔记 > 前端 > 正文

NSURLConnection,NSURLRequest和远程缓存

如何解决《NSURLConnection,NSURLRequest和远程缓存》经验,为你挑选了1个好方法。

我在iPhone上使用NSURLConnection异步连接进行请求缓存时遇到了一个小问题.我不知道我是否理解错误的东西,或者Cocoa是否与它应该做的相反...

NSURLRequest的文档说:

NSURLRequestReloadIgnoringLocalCacheData

指定应从原始源加载URL加载的数据.不应使用现有的缓存数据来满足URL加载请求.

和:

NSURLRequestReloadIgnoringLocalAndRemoteCacheData

指定不仅应忽略本地缓存数据,而且应指示代理和其他中间人在协议允许的情况下忽略其缓存.

现在,如果我使用NSURLRequestReloadIgnoringLocalCacheData(它应该忽略本地缓存,但使用远程缓存,如果可用)发送NSURLRequest,则发送的标头是:

GET /dashboard HTTP/1.1
User-Agent: XBlip1.0 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (iMac8%2C1)
X-Blip-Api: 0.02
Accept: application/json
Authorization: Basic (...)
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: api.blip.pl

状态是200 OK.但是,如果我使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData,它应该忽略本地和远程缓存,顾名思义,添加了一个额外的标头:

If-None-Match: "d751713988987e9331980363e24189ce"

并且响应是304 Not Modified.我已经检查了HTTP RFC,并且对于"If-None-Match"它说:

如果任何实体标签与在该资源上对类似GET请求(没有If-None-Match标头)的响应中返回的实体的实体标签匹配,(...)则服务器不得执行请求的方法(...)相反,如果请求方法是GET或HEAD,服务器应该响应304(未修改)响应

因此,如果我使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData而不是忽略远程缓存,Cocoa似乎明确告诉远程服务器它应该使用远程缓存,如果我使用NSURLRequestReloadIgnoringLocalCacheData,它不会添加该行,实际上远程缓存不是用过的.

那究竟发生了什么?我错过了什么,或者Cocoa设置了错误的标题?



1> 0xced..:

从文档:

指定不仅应忽略本地缓存数据,而且应指示代理和其他中间人在协议允许的情况下忽略其缓存.

来自NSURLRequest.h(10.5 SDK)

指定不仅应忽略本地缓存数据,而且应指示代理和其他中间人在协议允许的情况下忽略其缓存.未实现.

注意区别:未实现

错误报告的时间......

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有