从 iOS9.0 开始,出于对请求安全性的考虑,默认将 Foundation.framework 中的 HTTP 请求协议更改为 SSL/TLS。换句话说,所有由程序发起的 HTTP 请求默认将请求 HTTPS 的内容。而且,在 HTTPS 出现 404 错误时,不会请求 HTTP 的内容。如果你的 APP 原本就使用 HTTPS,基本上不会有问题。但是,如果使用 HTTP 的话,需要进行以下操作:
- 修改你的服务器配置,使其支持 HTTPS 访问。
- 修改你的 info.plist 配置,让 APP 能够访问普通的 HTTP 协议网站。否则,在调试程序时,会在 Log 中出现以下提示:
App Transport Security has blocked a cleartext HTTP (http://) resource
load since it is insecure. Temporary exceptions can be configured via
your app's Info.plist file.
修改 info.plist 时,苹果也提供了修改方法。在 info.plist 中增加以下内容即可:
NSAppTransportSecurity
NSExceptionDomains
lidaren.com
NSIncludesSubdomains
NSTemporaryExceptionAllowsInsecureHTTPLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
如果你的 app 具有浏览器功能,可以这样改,就可以完全放开 HTTP 访问功能了:
NSAppTransportSecurity
NSAllowsArbitraryLoads
最后附上原文链接:https://stackoverflow.com/questions/30720813/cfnetwork-sslhandshake-failed-ios-9