使用 Alamofire 4 的 eTag 支持

eTag support using Alamofire 4

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

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

NSURLCache and ETags

但是不行。

这是网络服务器发送的 http header:

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

你有什么提示吗?

非常感谢。

默认情况下,缓存处于打开状态。如果您在应用程序中记录 HTTP 流量,您可能会看到缓存的响应,而应用程序这次没有向服务器发出请求。

如果 URLSession 决定 return 缓存响应而不是转到服务器,您将看到相同的 Date HTTP 响应 header。

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

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

如果你想改变这个行为并看到来自网络的"real"响应,以便你可以自己处理eTag和statusCode,你只需要将缓存策略更改为reloadIgnoringCacheData:

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

希望这对某人有所帮助!