如果-无-匹配和NSURLConnection

10

我的服务器正在设置etag头元素以支持缓存。

iOS(6.1.4)应用程序使用本地的NSURLConnection类向服务器发送XML请求

第一次服务器在头部中发送带有etag的响应

如果iOS应用程序向服务器发送完全相同的请求,我可以在服务器日志中看到NSURLConnection未填充if-none-match头部

...然后服务器会响应200而不是304

用于请求的缓存策略是:

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

NSURLCache 初始化时需指定

[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];

我的问题: - NSURLConnection 没有设置 "if-none-match" 头字段是正常的吗? - 我需要自己设置这个头字段吗?(从缓存中获取响应,读取 etag 值并将其设置在请求头中)?

2个回答

3
我遇到了同样的问题。对我来说,我使用的是默认缓存策略(NSURLRequestUseProtocolCachePolicy),它会自动设置“if-none-match”头字段,服务器将对其进行检查。然而,将缓存策略设置为“NSURLRequestReloadIgnoringLocalCacheData”显然会删除该头字段。
你是否尝试过其他缓存策略值,看看它们是否为你添加了该头?
这里有一篇关于这些不同缓存策略值的精彩博客:http://nshipster.com/nsurlcache/ 编辑:我找到了另一个stackoverflow问题,证实了我上面说的:NSURLCache and ETags

1
在我的情况下,我也使用了 NSURLRequestReloadIgnoringLocalCacheData。我以为我在使用 NSURLRequestReturnCacheDataElseLoad,因为我自己添加了 If-None-Match 头部(并且当我没有发送它时出现了错误),而我已经忘记了我是自己添加头部的。 - Marián Černý

0

同时在Xcode中查找符号(右键单击符号并“跳转到定义”)。根据文件的注释,有一些符号是存在但未实现的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接