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

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

假设我的域名是example.com。


当前回答

使用NSAppTransportSecurity:

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

其他回答

对于那些来到这里试图找到其WKWebView始终为白色且不加载任何内容的原因的人(正如本文所述,我如何让WKWebView在swift和macOS应用程序中工作):

如果以上所有的火箭科学都不适用于你,请检查显而易见的:沙盒设置

作为swift和cocoa的新手,但在编程方面非常有经验,我花了大约20个小时来找到这个解决方案。数十个时髦的iOS教程和苹果主题演讲中都没有提到这个小复选框。

有两种解决方案:

解决方案1:

在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个关键字为“允许任意加载”的元素

Plist结构应如下图所示。

解决方案2:

在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个键为“NSExceptionDomains”的元素添加具有NSDictionary类型的键“MyDomainName.com”的元素添加具有布尔类型的键“NSIncludesSubdomains”且值设置为YES的元素添加具有Boolean类型的键“NSTemporaryExceptionAllowsInsecureHTTPLoads”且值设置为YES的元素

Plist结构应如下图所示。

首选解决方案2,因为它只允许选定的域,而解决方案1允许所有不安全的HTTP连接。

2015-09-25(2015-09-18 Xcode更新后):

我用了一种非懒惰的方法,但没有奏效。以下是我的尝试。

第一

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

其次,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

最后,我使用了懒惰的方法:

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

这可能有点不安全,但我找不到其他解决方案。

以下是直观的设置:

⛔️ 不要使用不良做法!

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

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


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

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

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

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