Ios 为什么我会得到';内容长度';使用AFN网络,但不使用Alamofire?

Ios 为什么我会得到';内容长度';使用AFN网络,但不使用Alamofire?,ios,swift,alamofire,afnetworking-3,Ios,Swift,Alamofire,Afnetworking 3,在Swift(Alamofire)中,我执行以下代码: let url = URL(string: "http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif")! let task = Alamofire.request(url) task.downloadProgress() { (progress) in print("*** \(progress.completedUn

在Swift(Alamofire)中,我执行以下代码:

let url = URL(string: "http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif")!
let task = Alamofire.request(url)
task.downloadProgress() { (progress) in
    print("*** \(progress.completedUnitCount) \(progress.totalUnitCount)\n")
}
进度。totalUnitCount
始终为-1

但是使用Objective-C(AFNetworking)代码:

totalBytesExpectedToRead
有效。 我看了看标题,它们有点不同。
Objective-C代码获取的标题具有
内容长度
,而Swift代码没有。

问题是我需要为Alamofire添加“Accept Encoding:gzip”。我不需要用网络来做这件事

request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")

看起来Akamai可能正在将这些图像缓存为压缩对象,并在下载之前将其解压缩。当它这样做时,它不会提前知道解压后的内容大小,因此不包括“内容长度”。

您确定响应没有缓存吗?服务器正在使用ETag缓存。如果响应被缓存,您将无法获得进度,因为图像不是实际下载的,而是从缓存加载的。@Sulthan我读取它的方式是对象是压缩存储的。见下面我的答案。我仍然不知道为什么Alamofire的做法与AFNetworking不同。我将其添加到标头中,但仍然不起作用,totalUnitCount始终为-1,然后我下载的文件比服务器大小大,你是否遇到了这个问题?@fam我的最终解决方案是停止使用Alamofire。我确实遇到过类似的问题,如果我没记错的话,我们在服务器上解决了这个问题。谢谢,我改为获取下载链接,而不是查看器链接(如文档),现在它可以工作了
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")