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

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

假设我的域名是example.com。


当前回答

对于Cordova,如果您想将其添加到ios.json中,请执行以下操作:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

并且它应该位于:

"*-Info.plist": {
   "parents": {
   }
}

其他回答

这是在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会议中找到,并对安全方面的更多内容进行了解释

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

更新Xcode 7.1,面临问题27.10.15:

Info.plist中的新值是“App Transport Security Settings”。从此,本词典应包含:

允许任意加载=是例外域(在此处插入您的http域)

如何修复?

按照以下步骤进行修复。

如本技术说明所述,确定可以自动执行哪些设置:

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com

开发示例

这里是一个plist的截图,它保持ATS的完整性(=安全),但允许通过HTTP而不是HTTPS连接到本地主机。它在Xcode 7.1.1中工作。