一、问题
某项目需要打包IOS,在打包过程中遇到了很多问题,以下是网络请求数据时报错
Task .<1180> finished with error [-1022] Error Domain=NSURLErrorDomain Code=-1022 “The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.” UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLStringKey=XXXXX,_NSURLErrorRelatedURLSessionTaskErrorKey=( “LocalDataTask .<1180>” ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<1180>, NSUnderlyingError=0x28107b660 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 “(null)”}}
二、原因
开发同学使用了http而不是https,出现问题的原因,是iOS9引入了新特性App Transport Security (ATS)。详情:App Transport Security (ATS)
新特性要求App内访问的网络必须使用HTTPS协议。但是我们的项目使用的是HTTP协议,使用私有加密方式保证数据安全
知识点
HTTP 与 HTTPS 区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
三、解决方案
- 如果要是方便的话,最好还是使用https
- 不愿意修改代码的情况下。可以在Xcode的工程目下的Info.plist添加以下修改
注意:请先XCode->Product->Clean Build Folder清除缓存,重新编译