根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?

传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。

假设我的域名是example.com。


当前回答

iOS 9.0或更高版本提供传输安全。尝试在应用程序中调用WS时可能会出现以下警告:

应用程序传输安全性已阻止明文HTTP(HTTP://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时异常。

将以下内容添加到Info.plist将禁用ATS:

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

其他回答

这是在iOS 9 GM种子上进行测试和工作的-这是允许特定域使用HTTP而不是HTTPS的配置:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoads必须为false,因为它不允许所有不安全的连接,但例外列表允许连接到一些没有HTTPS的域。

这里是直观的:

这是在plist中添加此项的快速解决方法(但不推荐):

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

这意味着(根据苹果的文档):

NSallows轨道荷载用于为NSExceptionDomains字典中未列出的任何域禁用应用程序传输安全性的布尔值。列出的域使用为该域指定的设置。默认值NO要求所有连接的默认应用程序传输安全行为。

我真的推荐链接:

苹果的技术说明WWDC 2015第706届会议(安全和应用程序)于1:50左右开始WWDC 2015第711届会议(与NSURLSession建立网络)博客文章用应用程序传输安全运送应用程序

这有助于我理解原因和所有含义。

下面的XML(在Info.plist文件中)将:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

不允许对所有页面进行任意调用,但PAGE_for_WHICH_SETTING_YOU_WANT_TO_OVERRIDE将允许连接使用HTTP协议。

在上面的XML中,您可以添加:

<key>NSIncludesSubdomains</key>
<true/>

如果要允许指定地址的子域进行不安全的连接。

最好的方法是阻止所有任意的加载(设置为false),并添加例外以仅允许我们知道的地址正常。

感兴趣的读者

2018年更新:

苹果不建议关闭此功能-更多信息可在2018年WWDC 207会议中找到,并对安全方面的更多内容进行了解释

由于历史原因和发展阶段,保留原始答案

⛔️ 不要使用不良做法!

许多答案(包括公认的答案)都告诉你要让你的应用程序的网络通信完全不安全!通过将“允许任意加载”设置为“是”(或true)。这是网络请求最危险的设置!它仅用于测试和临时用途。

你可以看到这位苹果工程师在WWDC18中清楚地说了这句话,即使是针对Web内容,你也在努力让他们都这样做!


✅ 将“允许任意加载”设置为NO!!!

您必须始终使用HTTPS进行网络连接。但如果真的不能,只需在info.plist中添加一个例外

例如,如果您正在使用http://google.com如果出现错误,您必须将其更改为https://google.com(带s),因为它支持得很好。

但是,如果你不知怎么做不到,(而且你无法说服后端开发人员支持SSL),就把这个不安全的域添加到info.plist中(而不是让它适用于所有不安全的网络!)

转到您的Info.plist

右键单击空白区域,然后单击“添加行”将密钥名称写为NSAppTransportSecurity,在其下选择例外域,将新项目添加到此写下需要访问的域名将域类型从字符串更改为字典,添加新项NSTemporaryExceptionAllowsInsecureHTTPLoads,这将是一个具有真值的布尔值。

使用NSAppTransportSecurity:

您必须在info.plist文件中的NSAppsTransportSecurity字典下将NSAllowsArbitraryLoads键设置为YES。