mre*_*404 5 objective-c ios afnetworking
我有一个用于在应用程序中下载视频的AFHTTPSessionManager创建NSURLSessionDownloadTask,有时在使用 http:80 url 初始化时会将其转换为 https:443。这是在进行任何连接尝试之前发生的(我NSURLSessionConfiguration在会话中添加了一个自定义 HTTP 协议类,以便在建立连接时进行记录)。
当请求到达
-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
Run Code Online (Sandbox Code Playgroud)
我的 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){
Run Code Online (Sandbox Code Playgroud)
...
[更新] 这个问题让我们很头疼,所以为了帮助故障排除,我创建了一个小测试项目来帮助缩小问题的范围。我的简单项目做了两件事,将 url 加载到 UIWebView 并使用 NSURLSessionDownloadTask 下载文件。这些操作的 url 遵循以下模式: WebView URL:https ://console.company.com/home.html 下载 URL:http : //data.company.com/file.txt 这些主机名解析为不同的 IP(不同的服务器)。
如果我在浏览 webview 之前下载文件,那么一切都很好,但是如果 webview 先加载它的 URL,那么下载 URL 将自动切换到 HTTPS,初始数据请求将失败。我们的一个想法是,一旦 iOS 为 webview 正在创建的 HTTPS 连接打开 TLS 隧道,它就会尝试对所有后续 *.company.com 连接使用相同的隧道。或者至少,它假设所有 *.company.com 连接也必须是 TLS。
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |