使用 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
希望这对某人有所帮助!
我正在尝试在我的应用中启用 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
希望这对某人有所帮助!