为什么我使用 AFNetworking 得到 'Content-Length' 而不是使用 Alamofire?
Why am I getting 'Content-Length' with AFNetworking but not with Alamofire?
在 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")
}
并且progress.totalUnitCount
总是-1。
但是有了这个 Objective-C (AFNetworking) 代码:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif"]];
AFHTTPRequestOperation *httpOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"*** %@", @(((double)totalBytesRead) / ((double)totalBytesExpectedToRead)));
}];
[httpOperation start];
totalBytesExpectedToRead
有效。
我查看了 headers,它们略有不同。
Objective-C 代码使用 Content-Length
得到 headers,Swift 代码没有。
问题是我需要为 Alamofire 添加 "Accept-Encoding: gzip"。我不需要使用 AFNetworking 执行此操作。
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")
似乎 Akamai 可能将这些图像缓存为压缩对象并在下载之前解压缩它们。当它这样做时,它不会提前知道解压缩的内容大小,因此它不包括 "Content-Length".
在 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")
}
并且progress.totalUnitCount
总是-1。
但是有了这个 Objective-C (AFNetworking) 代码:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif"]];
AFHTTPRequestOperation *httpOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"*** %@", @(((double)totalBytesRead) / ((double)totalBytesExpectedToRead)));
}];
[httpOperation start];
totalBytesExpectedToRead
有效。
我查看了 headers,它们略有不同。
Objective-C 代码使用 Content-Length
得到 headers,Swift 代码没有。
问题是我需要为 Alamofire 添加 "Accept-Encoding: gzip"。我不需要使用 AFNetworking 执行此操作。
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")
似乎 Akamai 可能将这些图像缓存为压缩对象并在下载之前解压缩它们。当它这样做时,它不会提前知道解压缩的内容大小,因此它不包括 "Content-Length".