【问题标题】:Swift: URLSession.shared.dataTask says status code 304 = 200?Swift:URLSession.shared.dataTask 说状态码 304 = 200?
【发布时间】:2018-03-23 14:59:50
【问题描述】:

我正在请求如下 JSON-API:

     var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.addValue(CredentialsProvider.shared.credentials, forHTTPHeaderField: "Authorization")

    let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
        guard let data = data, let _ = response, error == nil else {
            return
        }

        let response1 = response as! HTTPURLResponse
        print(response1.statusCode) // 200 instead of 304
    }

由于服务器进行缓存(我通过 CharlesProxy 验证),我希望状态码 304 但记录了 200 - 有没有办法获得“真实”状态码?

【问题讨论】:

  • 您确定您的后端在您想要的用例中指定了状态 ode 304?
  • @murphguy 是的,正如 CharlesProxy 所说的
  • 您是否还需要将If-Modified-Since 传递到标头中,以便它成为有条件的获取请求,而不是您那里的非条件获取请求
  • 试试这个request.cachePolicy = .reloadIgnoringCacheData
  • 它应该是 "POST" 而不是 "GET"。如果您只需要下载,则无需使用URLRequest,除非您只获取标题。顺便说一句let _ = response 毫无意义

标签: swift urlsession


【解决方案1】:

将 cachePolicy 设置为 .reloadIgnoringCacheData 对我有用。

request.cachePolicy = .reloadIgnoringCacheData

【讨论】:

  • 这意味着您忽略了 Akamai/本地缓存响应,这从网络/api 的角度来看并不好。
猜你喜欢
  • 2011-08-13
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 2017-03-27
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多