NSURLSessionDownloadTask从http切换到https

5
我有一个使用NSURLSessionDownloadTaskAFHTTPSessionManager,用于在应用程序中下载视频。有时,当使用http:80 url进行初始化时,它会将其转换为https:443。这是在尝试建立任何连接之前发生的(我通过NSURLSessionConfiguration向会话添加了自定义HTTP协议类以记录连接何时被建立)。
到请求传递到...
-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response 

我的CustomHTTPProtocolDelegate类中的委托方法,请求已更改为https。

App Transport Security已禁用(NSAllowsArbitraryLoads=true),这种行为似乎与特定的仅支持http服务器相关(其他仅支持http服务器没有问题,并且连接是在端口80上进行的)。

有什么想法吗?我还能做些什么来调试?

以下是如何创建下载任务的(包括调试自定义协议类):

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSessionConfiguration* config = [NSURLSessionConfiguration ephemeralSessionConfiguration];
    config.protocolClasses = @[[CustomHTTPProtocol class]];
    AFHTTPSessionManager *session = [[AFHTTPSessionManager manager] initWithSessionConfiguration:config];

    self.downloadTask = [session downloadTaskWithRequest:request  progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){

[更新] 这个问题给我们造成了很多麻烦,所以为了帮助排除故障,我创建了一个小测试项目来帮助缩小问题的范围。我的简单项目有两个功能,即将URL加载到UIWebView中和使用NSURLSessionDownloadTask下载文件。这些操作的URL遵循以下模式: WebView URL:https://console.company.com/home.html 下载URL:http://data.company.com/file.txt 而这两个主机名会解析为不同的IP地址(不同的服务器)。

如果在导航网页视图之前下载文件,则一切正常,但如果网页视图先加载其URL,则下载URL将自动切换为HTTPS,并且数据的最初请求将失败。我们有一个想法,即一旦iOS为网页视图创建的HTTPS连接打开TLS隧道,它就尝试将该隧道用于所有后续的*.company.com连接。或者至少它会认为所有的*.company.com连接也必须是TLS。


服务器是否可以强制使用https?或者可能是HSTS最长时间的问题?您是否尝试过不使用AFNetworking而是使用常规的iOS会话,看看会发生什么?我不确定,但也许最新版本的AFNetworking进行了一些聪明的把戏(不太可能,但我没有检查)?HHTPS是一件好事(所以我想如果您的服务器支持它,您应该只需使用它),但那可能不是问题的关键。 - Gero
服务器根本不支持https;只能使用http的内容服务器,也无法切换到https。我已经使用NSURLSession重新实现了它,而不是使用AFNetworking,但我得到了相同的行为。此外,据我所知,从http到https的切换发生在请求通过网络发送之前。这是CoreFoundation中的某些内部机制。 - mreynolds0404
你是否能够从API调用中获取到任何数据? - Paras Gorasiya
没有数据,服务器拒绝https连接。 - mreynolds0404
1个回答

0
弄清楚了。两个服务器都为所有子域发送HSTS header。由于NSURLSession下的网络层观察到了此标头,因此对HTTP服务器的调用在离开客户端之前就被升级为HTTPS。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接