在iOS 9中,我使用NSURL和NSURLConnection,对于一个特定的网址,它会在- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
委托方法中产生以下错误。
错误域= NSPOSIXErrorDomain代码= 89"操作已取消" UserInfo = {NSErrorFailingURLStringKey = URL,_kCFStreamErrorDomainKey = 1, NSErrorPeerAddressKey = {length = 16, capacity = 16,bytes = 0x100201bb41d733370000000000000000}, _kCFStreamErrorCodeKey = 89,NSErrorFailingURLKey = URL}
请求未被取消,至少不是我们的代码。有什么奇怪的是,这里的错误甚至不是NSURLErrorDomain,它是NSPosixErrorDomain。
该领域的用户报告了一个问题,这是根本原因,但很难确定为什么会发生这种情况。在OS X上使用curl访问此特定URL(使用相同的请求,User-Agent和all),不会产生此错误,响应完全符合预期。但是,即使从iOS Safari浏览器访问此特定URL仍然无法正常工作。可能有一些奇怪的服务器配置,但我不会期望错误如此一般,如取消。
据报道,iOS 8并没有发生这种情况。这个网址并没有什么特别之处,它似乎无法通过我们的堆栈。除了didFailWithError之外,不会发生auth质询或任何类型的委托回调,它会立即发生。其他人在iOS 9中看到过这种行为吗?
更新:似乎产生此错误的特定网址不仅限于我们的应用程序。实际上,只是尝试在iOS 9上的iOS Safari中访问此特定URL会产生相同的错误。我设法在iOS Safari iOS iOS中测试了这个,并且没有重现错误。
答案 0 :(得分:1)
这可能是ATS问题吗?对于针对iOS 9 SDK链接的应用程序,iOS 9对其将接受的TLS证书类型以及它将允许的TLS协议(例如,不再有SSLv3)使用更严格的规则。此外,它要求所有请求都是HTTPS(而不是HTTP)。
您可以覆盖此行为(如果必须)或修复服务器。
有关详情,请参阅Apple的Info.plist documentation。
如果这没有帮助,请尝试按QA 1887中所述启用CFNetwork调试,并查看其吐出的内容。
答案 1 :(得分:0)
只是为这个问题添加一些颜色,我将解释我们的类似情况以及我们如何处理它。
设置:
根本原因:
我们还尝试了什么:
我们如何“修理”它: