Ios 即使显式返回304,Alamofire响应也始终具有200状态代码
我正在尝试在我的应用程序中创建一些缓存。这就是流程: 用户进入应用程序后,应用程序将检查自上次刷新以来天气是否有任何变化,如果有,服务器将返回200并刷新页面。 否则,服务器返回304,什么也不发生。 我在ios应用程序中使用alamofire,我尝试了其中的任何配置,但没有任何帮助。 真正奇怪的问题是,即使服务器显式返回状态代码304,我的应用程序仍然得到200。 这是代码:Ios 即使显式返回304,Alamofire响应也始终具有200状态代码,ios,iphone,swift,alamofire,http-status-code-304,Ios,Iphone,Swift,Alamofire,Http Status Code 304,我正在尝试在我的应用程序中创建一些缓存。这就是流程: 用户进入应用程序后,应用程序将检查自上次刷新以来天气是否有任何变化,如果有,服务器将返回200并刷新页面。 否则,服务器返回304,什么也不发生。 我在ios应用程序中使用alamofire,我尝试了其中的任何配置,但没有任何帮助。 真正奇怪的问题是,即使服务器显式返回状态代码304,我的应用程序仍然得到200。 这是代码: if Reachability.isConnectedToNetwork() { let urlreq = N
if Reachability.isConnectedToNetwork() {
let urlreq = NSMutableURLRequest(URL: NSURL(string: API.feedURL())!,cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
, timeoutInterval: 5000)
Alamofire.request(.GET, urlreq, parameters: ["category_name":category],encoding: ParameterEncoding.URL, headers: API.getHeaders())
.validate(statusCode: 200..<500)
.responseJSON { request, response, result in
switch result {
case .Success(let data):
let statusCode = response!.statusCode as Int!
if statusCode == 304 {
completionHandler(didModified: false, battlesArray: [])
} else if statusCode == 200 {
let json = JSON(data)
var battlesArray : [Battle] = []
for (_,subJson):(String, JSON) in json["battles"] {
battlesArray.append(Battle(json: subJson))
}
completionHandler(didModified: true, battlesArray: battlesArray)
}
case .Failure(_, let error):
print ("error with conneciton:\(error)")
}
SVProgressHUD.dismiss()}
如果可达性.isconnectedtonework(){
设URLEQ=NSMutableURLRequest(URL:NSURL(字符串:API.feedURL())!,cachePolicy:NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
,timeoutInterval:5000)
请求(.GET,urlreq,参数:[“category_name”:category],编码:ParameterEncoding.URL,头:API.getHeaders()
.validate(statusCode:200..iOS网络代码自行处理3xx代码。您在不正确的情况下使用HTTP状态代码。这不仅仅是一个数字。如果您要创建缓存而不是HTTP缓存,请使用200并返回“缓存”数据中的状态。这是预期的用例。您的应用程序代码只需要担心200个条件,库透明地处理缓存的响应。这解决了问题!