gpt4 book ai didi

ios - NSURLSessionDownloadTask 从 http 切换到 https

转载 作者:可可西里 更新时间:2023-11-01 06:13:13 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com