2017-05-22 11 views
3

이 요청이 캐시되는 이유를 아는 사람이 있습니까?iOS URL 캐시 캐싱 (IMHO)

  • 나는 수정되지 않은 .defaultURLSessionConfiguration을 사용하고 있습니다.

  • 응답 헤더는 다음과 같습니다

내가 요청 것을 확인하고있어

{ 
    "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 캐시를 설정하면 모든 요청이 찰스에 표시되므로 찰스가 유효한 테스트라는 것을 알고 있습니다.

저는 항상 캐시 헤더가없는 경우 캐시되지 않는다고 가정했습니다.

아무도 아이디어가 없습니까?


편집 : 여기에 내가 항상 캐시가 응답을 헤더없이 캐시되지 않는다는 것을 가정 한

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 
+0

어떤 요청이 생겼는데? –

+0

@Koen. S3 버킷을 가리키는 URL을 얻는 것일뿐입니다. 사용자 정의 헤더 등은 전혀 없습니다! – deanWombourne

답변

4

을 만들고있어 요청이있어 : | , 심지어 Cache-Control 또는 Expires 헤더없이 응답을 캐시하지 않습니다 그것이 작동하는 방법

, all other criteria met 경우. 그러나 응답 헤더에 정확한 만료 시간이 제공되지 않으므로 캐시 된 응답 신선도를 결정하는 방법을 사용합니다. NSURLCacheRFC 2616의 13 절에 따라 구현되며이 동작은 여기에 명시되어 있습니다. 자세한 내용은 확인할 수있는 다음과 같은 기사를

: