使用Alamofire 4的eTag支持

时间:2016-12-06 22:46:24

标签: ios swift3 alamofire etag

我正在尝试在我的应用中启用eTag支持。 我在我的快速3项目中使用Alamofire 4。

似乎eTag是由Alamofire使用的URLRequest透明处理的:

NSURLCache and ETags

但它不起作用。

这是Web服务器发送的http标头:

headers {
    Connection = "keep-alive";
    "Content-Length" = 47152;
    "Content-Type" = "application/json";
    Date = "Tue, 06 Dec 2016 22:43:18 GMT";
    Etag = "\"ecf38288be2f23f6710cafeb1f344b8c\"";
} })

你有任何暗示吗?

非常感谢。

3 个答案:

答案 0 :(得分:8)

默认情况下,缓存为ON。如果您在应用程序中记录HTTP流量,您可能会看到缓存的响应,而此时应用程序没有向服务器发出请求。

如果URLSession决定返回缓存响应而不是去服务器,您将看到相同的Date HTTP响应标头。

为确保缓存正常,您应检查应用和服务器之间的网络数据包。

答案 1 :(得分:1)

这是使用URLRequest时的默认缓存策略。

如果您想要更改此行为并查看来自网络的“真实”响应,以便您可以自己处理eTag和statusCode,则只需将缓存策略更改为reloadIgnoringCacheData:< / p>

var exampleRequest = try! URLRequest(url: route, method: .post, headers: headers)
// This is the important line.
exampleRequest?.cachePolicy = .reloadIgnoringCacheData

希望这有助于某人!

答案 2 :(得分:-1)

我遇到了同样的问题。

而不是将\"ecf38288be2f23f6710cafeb1f344b8c\"发送回服务器

发送"ecf38288be2f23f6710cafeb1f344b8c"