当请求到达时
-(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.