iOS URLCache缓存时不应该(恕我直言)

时间:2017-05-22 21:00:32

标签: ios caching nsurlsession nsurlcache

有谁知道为什么要缓存此请求?

  • 我正在使用未经修改的.default URLSessionConfiguration

  • 回复标题为:

(来自Charles,通过调试数据任务完成块中的响应确认)

{
    "Accept-Ranges" = bytes;
    "Content-Length" = 1480;
    "Content-Type" = "application/json";
    Date = "Mon, 22 May 2017 19:14:13 GMT";
    Etag = "\"42bebc5fb88323b8cd145ed85ea7a018\"";
    "Last-Modified" = "Mon, 22 May 2017 14:54:38 GMT";
    Server = AmazonS3;
    "x-amz-id-2" = "abcdefghijklmn";
    "x-amz-request-id" = 1A2B3C4D5E;
}
  • 我正在验证请求是否使用Charles代理缓存 - 第一个请求出现,但后续请求没有。

  • 使用.ephemeral会话配置,或者将内存和磁盘大小设置为0的自定义URL缓存显示Charles中的所有请求,因此我知道Charles是一个有效的测试。

我一直认为,如果没有缓存标头,则不会缓存响应:|

任何想法?

编辑:这是我正在制作的请求

po task.originalRequest
▿ Optional<URLRequest>
  ▿ some : http://s3-eu-west-1.amazonaws.com/path/path/configuration.json
    ▿ url : Optional<URL>
      ▿ some : http://s3-eu-west-1.amazonaws.com/path/path/configuration.json
    - cachePolicy : 0
    - timeoutInterval : 60.0
    - mainDocumentURL : nil
    - networkServiceType : __ObjC.NSURLRequest.NetworkServiceType
    - allowsCellularAccess : true
    ▿ httpMethod : Optional<String>
      - some : "GET"
    - allHTTPHeaderFields : nil
    - httpBody : nil
    - httpBodyStream : nil
    - httpShouldHandleCookies : true
    - httpShouldUsePipelining : false

1 个答案:

答案 0 :(得分:5)

  

我一直认为,如果没有缓存标头,则无法缓存响应:|

如果它不起作用,即使没有Cache-ControlExpires标头,它也会缓存响应,如果all other criteria met。但是,它将使用启发式方法来确定缓存的响应新鲜度,因为响应头中未提供准确的到期时间。 NSURLCache是根据RFC 2616第13条实施的,此处列出了此行为。

有关详细信息,请查看以下文章: