iOS 9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL。采用TLS 1.2协议,目的是强制增强数据访问安全,而且系统Foundation框架下的相关网络请求,将不再默认使用Http等不安全的网络协议,而默认采用TLS 1.2。服务器因此需要更新,以解析相关数据。如果不更新,可通过在Info.plist中声明,倒退回不安全的网络请求。
解决方案如下:
- (1)、服务器升级使用TLS 1.2;
- (2)、在info.plist里面增加如下配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如果复杂一些,还可以指定白名单域名,声明所支持TLS的最低版本,这里就不再详细描述了。
ps:另外需要注意的是,即使写了上述配置,在HTTPS页面中,HTTP的javascript或css不会被加载,因为苹果认为这降低了页面的安全性。
具体方法:
在项目的info.plist中添加一个key值NSAppTransportSecurity,类型为字典类型。然后给它添加一个Key:NSAllowsArbitraryLoads,类型为Boolean类型,值为YES;
- (3)、设置域。
可以简单理解成,把不支持https协议的接口设置成http的接口,具体方法如下:
- 在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。
- 然后给它添加一个NSExceptionDomains,类型为字典类型;
- 把需要的支持的域添加給NSExceptionDomains。其中域作为Key,类型为字典类型。
- 每个域下面需要设置3个属性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。均为Boolean类型,值分别为YES、NO、YES。
提示:在iOS9中如果使用到网络图片,也要注意网络图片是否是HTTP的,如果是,也要把图片的域设置!!!!!!