参考文章:http://blog.csdn.net/u012947646/article/details/51915985
http://www.csdn.net/article/2015-09-11/2825675
一、访问Http,info.plist操作
开发者可以在App的Info.plist中添加NSAppTransportSecurity的相关配置,用以禁用ATS或者添加白名单,可用的配置参数如下:
- NSAllowsArbitraryLoads - 设置true即支持所有HTTP请求
- NSExceptionDomains - 添加白名单
- NSExceptionMinimumTLSVersion - 白名单指定域名支持的TLS版本
- NSExceptionRequiresForwardSecrecy - 白名单指定域名是否支持- Forward Secrecy
- NSExceptionAllowsInsecureHTTPLoads - 白名单指定域名禁用ATS
- NSThirdPartyExceptionMinimumTLSVersion - 白名单指定第三方服务域名最低支持的TLS版本
- NSThirdPartyExceptionRequiresForwardSecrecy - 白名单指定第三方服务域名是否支持Forward Secrecy
- NSThirdPartyExceptionAllowsInsecureHTTPLoads - 白名单指定第三方域名禁用ATS
举个例子:
禁用所有连接使用ATS
在Info.plist中配置禁用ATS:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitrary</key>
<true/>
</dict>
指定域名禁用ATS
在Info.plist中配置App的服务域名mine.test.com支持HTTP:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mine.test.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
</dict>
</dict>
</dict>
指定域名修改ATS安全要求
在Info.plist中配置第三方服务third.test.com的TLS1.1及禁用Forward Secrecy:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mime.test.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
</dict>
<key>third.test.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>1.1<string/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
二、iOS10 AFN能访问https不能访问http问题
出错原理:
当 NSAllowsArbitraryLoads 和 NSAllowsArbitraryLoadsInWebContent 同时存在时,根据系统不同,表现的行为也会不一样。简单说,iOS 9 只看 NSAllowsArbitraryLoads,而 iOS 10 会先看 NSAllowsArbitraryLoadsInWebContent。
在 iOS 10 中,要是** NSAllowsArbitraryLoadsInWebContent** 存在的话,就忽略掉 NSAllowsArbitraryLoads,如果它不存在,则遵循 NSAllowsArbitraryLoads 的设定。