ios – NSURLSessionDownloadTask从http切换到https

前端之家收集整理的这篇文章主要介绍了ios – NSURLSessionDownloadTask从http切换到https前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@
@H_502_0@
我有一个AFHTTPSessionManager创建的NSURLSessionDownloadTask用于下载应用程序中的视频,有时当使用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上作为http连接).

什么可能会发生什么?还有什么我可以调试的吗?

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

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){

[UPDATE]
这个问题引起了我们一些麻烦,所以为了帮助进行故障排除,我创建了一个小测试项目来帮助缩小问题范围.我的简单项目做了两件事,将一个url加载到UIWebView中并使用NSURLSessionDownloadTask下载文件.这些操作的网址遵循以下模式:
WebView URL:https://console.company.com/home.html
下载网址:http://data.company.com/file.txt
这些主机名解析为不同的IP(不同的服务器).

如果我在导航webview之前下载文件,那么一切都很好,但如果webview首先加载其URL,那么下载URL将自动切换到HTTPS,并且初始数据请求将失败.我们有一个想法是,一旦iOS为webview正在创建的HTTPS连接打开TLS隧道,它就会尝试为所有后续的* .company.com连接使用相同的隧道.或者至少,它假设所有* .company.com连接也必须是TLS.

解决方法

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

猜你在找的iOS相关文章