IOS HTTP 请求错误:NSURLConnection finished with error - code -1022

报错其实是因为自 iOS9 起引入的新特性App Transport Security (ATS)。

官方详情:App Transport Security (ATS)

我们游戏使用的是HTTP访问服务器,之前没考虑到IP更换的可能,所以原先请求ip地址的,后来改成请求域名,一打包,ios请求发送就出现了问题

错误:NSURLConnection finished with error - code -1022。

百度一发,最后在一遍博客中 找到了解决方法。

这里提前说下我最终使用了第三种方式,因为项目域名 xxxx.com,然而请求接口的时候 是 xxx.com/xxxx/xxxx 这种形式,所以需要用到一个设置 NSIncludesSubdomains 子域名启用相同配置~

原文地址: https://www.jianshu.com/p/601f3fa318ed

转载:

作者:欢乐的乐
链接:https://www.jianshu.com/p/601f3fa318ed
来源:简书

当无法加载http图片或者链接的时候,百度到一波需要如下的设置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

一直以来这样设置都没有问题

❗️但是,最近发现,自己App中的微信头像(微信登录返回的头像地址的http开头)无法加载显示,打印了错误发现是

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

字面意思就是无法加载HTTP的图片。
百度了很多都是说设置NSAllowsArbitraryLoads为true。但是我明明设置了,而且之前是可以的为什么最近不可以。因为自己最近换了微信头像,还以为和我换了头像有关系。。。。

最后看到歪果兄dei说的一个答案。

 

ios12无法加载HTTP的解决

具体链接 --> stackoverflow.com

 

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <key>NSExceptionAllowInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

然后就可以了!!!

如果还是不行可以这样

 

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <key>NSExceptionAllowInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

内容解释

NSAllowsArbitraryLoads

设置为TURE的话,就会使得除了开发者在NSExceptionDomains里面配置的域名以外所有的网络连接不受限制。

NSAllowsArbitraryLoadsInWebContent

如果你设置为TURE的话,系统会禁用对来自Web视图的请求的所有ATS限制,也就是你的WebView的请求不不一定需要HTTPS,APP就可以使用嵌入式浏览器来显示任意内容,但是应用的其他部分还是需要用ATS。

NSExceptionDomains

NSExceptionDomains其实是相当于NSAllowsArbitraryLoads的一个子集。后者是全局的作用,而前者主要是用于对某些域名的限制作用。他的主要作用其实就是用于们自签名的证书。

NSExceptionDomains字典里面各键的值意义如下。

  • NSIncludesSubdomains

默认为FALSE,如果设置为TURE,则表示当前设置域名的所有子域名也使用同样的配置

  • NSExceptionAllowInsecureHTTPLoads

允许不安全的HTTP请求,这里所谓的不安全,不代表改变了 Transport Layer Security (TLS)或是事HTTPS的请求。所谓的不安全主要是因为使用自签名的证书,没有经过CA认证所以苹果并不知道是不是安全的,如果开发者允许那么苹果也允许加载。

  • NSExceptionRequiresForwardSecrecy

默认值为TURE,如果设置为FALSE,则允许不支持完全前向保密(PFS)的TLS密码(对于指定的域名)。

  • NSTemporaryExceptionAllowsInsecureHTTPLoads

默认值是FALSE,如果设置为TURE,则表示允许App进行不安全的HTTP请求


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值