在我们当前的项目中,我们使用AFNetworking(基于Foundation URL加载系统)。到目前为止一切正常。
最近我们在响应头中引入了ETag,默认情况下应该将其处理为NSURLConnection(意味着基础URL加载系统)。收到的ETag值(来自响应)应作为“If-None-Match”包含在下一个请求头中。这就是理论
实际上,我们的ETag是一个整数,我们的后端会在每个有效请求中增加此整数,并在响应头中发送此增加的值。
在客户端,我们没有更改任何内容,并使用查尔斯检查请求和响应标头。我们不打算集成一些缓存,我们只对ETag值处理感兴趣。
结果真的很奇怪。对于第一个请求(大约10个请求),没有设置“If-None-Match”头字段。在这段时间之后,一切都可以满足一些要求。最后收到的ETag值在下一个请求的“If-None-Match”头字段中发送。然后在大约30个请求之后,“If-None-Match”头字段中的值不是假定值。例如,最后收到的ETag值为38,请求中的“If-None-Match”值为8。
| Request (If-None-Match)| Response (ETag) | Expected | | ---------------------- |------------------|----------| | | 1 | YES | | | 2 | NO! | | | 3 | NO! | | ... | ... | ... | | 11 | 12 | YES | | 12 | 13 | YES | | 13 | 14 | YES | | ... | ... | ... | | 30 | 31 | YES | | 8 | ? | NO! |
有没有人体验或了解如何在NSURLConnection中处理ETag(意味着基础URL加载系统)以及为什么我们会看到这些奇怪的结果?
或者更直接,有没有人提供一些技巧和实践如何解决问题?我们是否需要为NSURLCache或相关的东西设置一些特定的值?