2017-05-22 9 views
3

誰でもこのリクエストがキャッシュされている理由を知っていますか?iOS URLCacheキャッシュしないでください(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; 
} 
  • (チャールズから、データのタスクの完了ブロックでの応答をデバッグで確認しました)チャールズプロキシを使用してキャッシュされます。最初のリクエストは表示されますが、後続のリクエストは表示されません。

  • .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のためのちょうどGETです - カスタムヘッダー等は全く興味深いものはありません! – deanWombourne

答えて

4

を作ってるんだリクエストです:|はそれがどのように動作するかではありません

all other criteria met場合、それは、さえCache-ControlまたはExpiresヘッダーなしの応答をキャッシュします。ただし、応答ヘッダーに正確な有効期限が設定されていないため、キャッシュされたレスポンスの新鮮度を判断するヒューリスティックを使用します。 NSURLCacheは、RFC 2616のセクション13に従って実装されており、この動作はそこに記述されています。詳しくはあなたが確認することができ、以下の記事のために

関連する問題