设置
在我们当前的项目中,我们使用 AFNetworking(基于 Foundation URL Loading System)。到目前为止一切正常。
理论
最近我们在响应头中引入了ETag,默认应该是NSURLConnection(即Foundation URL Loading System)处理的。收到的 ETag 值(来自响应)应包含在下一个请求标头中作为“If-None-Match”。这就是理论。
实际上,我们的 ETag 是一个整数,我们的后端在每个有效请求上增加这个整数,并在响应头中发送这个增加的值。
在客户端中,我们什么也没做,并用 charles 检查了请求和响应标头。我们不打算集成一些缓存,我们只对 ETag 值处理感兴趣。
结果
结果真的很奇怪。对于第一个请求(大约 10 个请求),没有设置“If-None-Match”标头字段。在此期间之后,某些请求一切正常。最后收到的 ETag 值在下一个请求的“If-None-Match”标头字段中发送。然后在大约 30 个请求之后,“If-None-Match”标头字段中的值不是假定值。例如,最后收到的 ETag 值为 38,请求中的“If-None-Match”值为 8。
| 请求(如果没有匹配)| 回复 (ETag) | 预期 | | ---------------------- |------------------|-------- --| | | 1 | 是 | | | 2 | 不!| | | 3 | 不!| | ... | ... | ... | | 11 | 12 | 是 | | 12 | 13 | 是 | | 13 | 14 | 是 | | ... | ... | ... | | 30 | 31 | 是 | | 8 | ? | 不!|
问题
有没有人了解或了解如何在 NSURLConnection(即 Foundation URL 加载系统)中处理 ETag,以及为什么我们会看到这些奇怪的结果?
或者更直接,有没有人有一些技巧和练习如何解决这个问题?我们是否需要为 NSURLCache 或相关的东西设置一些特定的值?