Поддержка eTag с использованием Alamofire 4
Я пытаюсь включить поддержку eTag в своем приложении.
Я использую Alamofire 4 в моем стремительном проекте 3.
Кажется, что eTag прозрачно обрабатывается URLRequest, который использует Alamofire:
NSURLCache и ETags
Но это не сработает.
Вот HTTP-заголовок, отправленный веб-сервером:
headers {
Connection = "keep-alive";
"Content-Length" = 47152;
"Content-Type" = "application/json";
Date = "Tue, 06 Dec 2016 22:43:18 GMT";
Etag = "\"ecf38288be2f23f6710cafeb1f344b8c\"";
} })
Есть ли у вас подсказка?
Большое спасибо.
Ответы
Ответ 1
По умолчанию кеширование включено. Если вы регистрируете HTTP-трафик внутри своего приложения, вы можете увидеть кешированные ответы, без приложения, отправляющего запросы на сервер на этот раз.
В случае, когда URLSession
решает вернуть кеш-ответ вместо перехода на сервер, вы увидите тот же заголовок ответа Date
HTTP.
Чтобы обеспечить кэширование, вы должны проверять сетевые пакеты между вашим приложением и сервером.
Ответ 2
Это политика кэша по умолчанию при использовании URLRequest
.
Если вы хотите изменить это поведение и увидеть "реальный" ответ в сети, чтобы вы могли самостоятельно обрабатывать eTag и statusCode, вам просто нужно изменить политику кэширования на reloadIgnoringCacheData
:
var exampleRequest = try! URLRequest(url: route, method: .post, headers: headers)
// This is the important line.
exampleRequest?.cachePolicy = .reloadIgnoringCacheData
Надеюсь, это поможет кому-то!
Ответ 3
У меня была такая же проблема.
Вместо отправки \"ecf38288be2f23f6710cafeb1f344b8c\"
обратно на сервер
отправить "ecf38288be2f23f6710cafeb1f344b8c"