ios - NSURLSessionDownloadTask 从 http 切换到 https

标签 ios objective-c afnetworking

我有一个 AFHTTPSessionManager 创建的 NSURLSessionDownloadTask 用于在应用程序中下载视频,有时在使用 http:80 url 初始化时会将其转换为 https:443。这是在进行任何连接尝试之前发生的(我通过 NSURLSessionConfiguration 添加了一个自定义 HTTP 协议(protocol)类到 session 中,以便在建立连接时进行记录)。

当请求到达

-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response 

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

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

知道会发生什么吗?我还能做些什么来调试?

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

    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 网址:https://console.company.com/home.html 下载地址:http://data.company.com/file.txt 这些主机名解析为不同的 IP(不同的服务器)。

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

最佳答案

想通了。两台服务器都发送 HSTS header对于所有子域。因为 NSURLSession 下的网络层观察到这个 header ,所以对 HTTP 服务器的调用在离开客户端之前被升级到 HTTPS。

关于ios - NSURLSessionDownloadTask 从 http 切换到 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828091/

相关文章:

ios - 在 Objective - C 中使用 AFNetworking 可恢复的分段文件上传

ios - 仪器中的能级数据为空

ios - 在 iOS 上将数据导出到 XLS(不是通过 CSV)

ios - 对具有不同开始时间和相同结束时间的两个 View 进行动画处理

objective-c - 设置相对于设备尺寸的自动布局约束

ios - 新应用程序的 Xcode 错误

iphone - 使用 AFJSONRequestOperation 返回 JSON

ios - 由于方法已弃用而导致 iOS 7 中的性能问题

objective-c - 我应该如何避免这种内存警告?

ios - 一个接一个发送一堆请求