Поддержка 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"