23

在 iOS 9 中,Apple 会阻止应用程序的不安全 HTTP 连接,除非将特定主机列入白名单。

http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

出于明显的原因,WebView(s) 是否不受这些规则的约束,还是我们仍然希望将浏览器打开的主机列入白名单……包括给定页面的所有链接?

我不确定这是我们的责任还是可以免除的。

4

4 回答 4

28

SFSafariViewController可以在没有 NSAppTransportSecurity 密钥的情况下显示 HTTP。

UIWebViewWKWebView需要上面提到的 NSAppTransportSecurity 键来显示 HTTP 页面。

于 2015-07-15T09:45:39.993 回答
11

根据 Apple 指南,我在我的应用程序 .plist 中插入了以下内容:

<key>NSAppTransportSecurity</key>
<dict>
     <!--Include to allow all connections - with and without SSL (DANGEROUS)-->
     <key>NSAllowsArbitraryLoads</key>
     <true/>
</dict>

当我尝试加载我的 webView (从 HTTPS 服务器不少于)时,我收到以下错误并且它没有加载。

NSURLSession/NSURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9813)

所以我看起来他们不仅没有豁免,即使你对.plist进行了正确的添加,它们也不起作用。

于 2015-07-08T22:43:29.993 回答
8

这个问题最初是关于 iOS 9 的;但是,根据 Apple 的文档

从 iOS 10.0 及更高版本开始,支持以下子项:

  • NSAllowsArbitraryLoadsInWebContent
  • ...

使用 NSAllowsArbitraryLoadsInWebContent,这样您就不需要将 WebView 可能加载的每个页面都列入白名单。

保留 NSAllowsArbitraryLoads 以保持与 iOS 9 的向后兼容性,并在此处启用 Xcode 8 项目 Info.plist 中的新设置: 在项目中启用 ATS

于 2016-12-29T20:14:07.593 回答
0

如果您的应用程序(例如第三方网络浏览器)需要加载任意内容,Apple 提供了一种完全禁用 ATS 的方法,但我怀疑您最好谨慎使用此功能:

<key>NSAppTransportSecurity</key>
    <dict>
        <!--Include to allow all connections (DANGER)-->
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
于 2015-10-08T06:08:27.977 回答