#経緯
使用ライブラリ: Alamofire
ある日、アプリとサーバーでやり取りしている最中に発生しました。
送ったリクエストに対して、レスポンスが返ってくるときに前に送ったときのレスポンスがそのまま返ってきたのです。
ヘッダーの情報は変わっているのにです。
サーバー側は正常なレスポンスを返しており、かつiosのアプリを起動し直すと治ります。
#原因
もともとAlamofireはNSURLSessionを元に作られているそうです。
NSURLSessionはレスポンスの結果が前回の結果と同じ場合(ヘッダー情報を含まず)はキャッシュされたレスポンスを返すそうです。
#対処方法
対処法1:キャッシュポリシーを設定してキャッシュしないようにする。
キャッシュポリシーを設定することによって、ローカルキャッシュの使用方法を指定します。
キャッシュポリシー | 説明 |
---|---|
URLRequestUseProtocolCachePolicy | デフォルトのキャッシュポリシーです。プロトコルに最も準拠したポリシーとして定義されます。 |
URLRequestReloadIgnoringCacheData | URLローディングシステムは送信元からデータを読み込み、キャッシュは完全に無視されます。 |
URLRequestReturnCacheDataElseLoad | キャッシュデータが存在する場合、URLローディングシステムは有効期間や有効期限を無視してキャッシュデータを使用し、キャッシュバージョンがない場合にのみ、送信元からデータを読み込みます。 |
URLRequestReturnCacheDataDontLoad | アプリケーションは、キャッシュ内のデータのみが返されるように指定できます。レスポンスがローカルキャッシュ内にない場合に、このキャッシュポリシーを使用してNSURLSessionTaskインスタンスを作成しようとすると、すぐにnilが返されます。 |
例
URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 5)
対処法2: キャッシュをクリアする
URLCache.shared.removeAllCachedResponses()
このコードを使用するとキャッシュを全て削除してくれます。
以上です。
間違えている箇所がございましたらご指摘お願いします。