在NSUrlConnection中处理Etag似乎是随机的

时间:2013-12-02 10:48:57

标签: nsurlconnection etag if-none-match

设置

在我们当前的项目中,我们使用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或相关的东西设置一些特定的值?

0 个答案:

没有答案