Kub*_*der 7 iphone cocoa-touch http nsurlconnection
我在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设置了错误的标题?
0xc*_*ced 10
从文档:
指定不仅应忽略本地缓存数据,而且应指示代理和其他中间人在协议允许的情况下忽略其缓存.
来自NSURLRequest.h(10.5 SDK)
指定不仅应忽略本地缓存数据,而且应指示代理和其他中间人在协议允许的情况下忽略其缓存.未实现.
注意区别:未实现
错误报告的时间......
小智 2
通过添加 NSURLRequestReloadIgnoringLocalAndRemoteCacheData 参数,您可以指示本地缓存和任何可能处理客户端和目标服务器之间请求的代理服务器不要返回自己版本的响应数据。我认为这里的关键组件是 RemoteCache 可能是一个代理,而您只是确定请求应该始终到达真实服务器而不是代理副本。
添加“stupidly-long-named”参数,您将推断您的应用程序已经具有请求的先前副本,因此只对从服务器实际接收数据(如果数据已更改)感兴趣,这就是您收到以下响应的原因来自服务器的“304 未修改”。
这种行为确实看起来违反直觉,因为您明确指示客户端不要使用自己的缓存,这意味着您希望丢弃其中的任何内容,并且肯定不会将其用作任何后续请求的引用。我相信提供高级缓存参数是为了允许开发人员处理自己的缓存级别,即。如果服务器上的数据尚未更新,则会收到通知,以便避免不必要的重新处理。
| 归档时间: |
|
| 查看次数: |
8059 次 |
| 最近记录: |