10

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

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

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

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

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

用于请求的缓存策略是:

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

NSURLCache 初始化为

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

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

4

2 回答 2

2

我遇到了同样的问题。对我来说,我使用的是默认缓存策略 (NSURLRequestUseProtocolCachePolicy),它会自动设置服务器将检查的“if-none-match”标头字段。但是,将缓存策略设置为“NSURLRequestReloadIgnoringLocalCacheData”显然会删除该标头字段。

您是否尝试过其他缓存策略值以查看它们是否为您添加了该标头?

可以在此处查看有关这些不同缓存策略值的精彩博客:http: //nshipster.com/nsurlcache/

编辑:我发现另一个堆栈溢出问题证实了我上面所说的:NSURLCache and ETags

于 2016-01-25T19:25:40.600 回答
0

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

于 2016-01-25T20:01:53.970 回答