Заголовок HTTP Content-Length
необходим для определения хода выполнения. Alamofire знает размер полученных данных, но чтобы показать прогресс, ему нужно всего Content-Length
Здесь я подготовил образец теста. Я буду сравнивать два сайта
- https://www.cocoacontrols.com
- https://www.stackoverflow.com
Первый не имеет Content-Length
в своих ответах, а второй имеет.
Используйте CURL
для проверки заголовков HTTP.
curl -I https://www.cocoacontrols.com
...
... // в этом выводе нет заголовка длины содержимого.
...
curl -I https://www.stackoverflow.com
...
длина содержимого: 149
...
Образец теста.
func sampleTest(link: String) {
let url = URL.init(string: link)!
Alamofire.request(url,
method: .get,
parameters: nil,
encoding: JSONEncoding.default,
headers: nil)
.downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
print("TEST Progress: \(progress.fractionCompleted)")
}
.validate { _, _, _ in
return .success
}
.responseData { response in
print("repsonse received")
}
}
Теперь вызываем этот метод следующим образом
Тест № 1
sampleTest(link: "https://www.cocoacontrols.com")
Выход № 1
TEST Progress: 0.0
TEST Progress: 0.0
TEST Progress: 0.0
TEST Progress: 0.0
Тест № 2
sampleTest(link: "https://www.stackoverflow.com")
Выход № 2
TEST Progress: 0.0
TEST Progress: 0.0
TEST Progress: 0.8040637101235478
TEST Progress: 1.0
Надеюсь, это поможет понять вашу проблему пропуска заголовка Content-Length
в вашем HTTP-ответе. Для дальнейшего использования, даже существует проблема github в репозитории Alamofire, которая сталкивается с той же проблемой, решаемой добавлением заголовка Content-Lenght
с добавлением в поле HEADER ответа.