iOS10 NSURLSession HTTP/2 无效

Posted

技术标签:

【中文标题】iOS10 NSURLSession HTTP/2 无效【英文标题】:iOS10 NSURLSession HTTP/2 Invalid 【发布时间】:2016-09-19 07:55:02 【问题描述】:

NSURLSession 请求 HTTP/2.0

ios9 中工作。

但在iOS10无效

我的代码:

 

    NSURLSession *session = [NSURLSession sharedSession];
    request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://ga.seeyouyima.com/page"]];
    [request setHTTPMethod:@"POST"];
    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
        if (completedBlock) 
            completedBlock(data, response, error);
        
    ] resume];

【问题讨论】:

您的代码是必需的。 可能是证书配​​置有问题。我有类似的issue。 服务器证书使用TLSv1.2。 【参考方案1】:

Charles Proxy 4 似乎会导致 iOS 10 不使用 HTTP/2。它似乎在 iOS 9 上运行良好。

您可以通过在 iOS 10 的 Mobile Safari 中加载 Akamai HTTP/2 演示来演示这一点:

https://http2.akamai.com/demo

如果您在访问该站点时启用 Charles Proxy,它将向您报告您的浏览器不支持 HTTP/2。

【讨论】:

这是正确的答案。 Charles Proxy 4 让 iOS 10 不再使用 HTTP/2。如果您需要使用 Charles Proxy 4 嗅探 HTTP/2 请求,请使用 iOS 9。 另外,对于那些想知道的人,iOS 9 模拟器确实可以解决这个问题。 我对使用 HTTP 2 的 Charles 和 NSURLSession 有相同的行为,但这很奇怪。为什么 Charles 在成功代理其他 HTTP 2 请求(例如 curl)时会使 HTTP 2 失败

以上是关于iOS10 NSURLSession HTTP/2 无效的主要内容,如果未能解决你的问题,请参考以下文章

带有 NSURLSession 的 Http/2 server_push

iOS 10 beta NSURLSession 请求的 cookie 消失了

对 iOS 8 的 HTTP/2 支持

在 iOS 中使用 NSUrlSession 一次下载 1 个文件

出于开发目的,如何使用 iOS 7 的 NSURLSession 及其委托方法系列接受自签名 SSL 证书?

iOS 7系列译文:忘记NSURLConnection,拥抱NSURLSession吧!