在 iOS 9 中,Apple 会阻止应用程序的不安全 HTTP 连接,除非将特定主机列入白名单。
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
出于明显的原因,WebView(s) 是否不受这些规则的约束,还是我们仍然希望将浏览器打开的主机列入白名单……包括给定页面的所有链接?
我不确定这是我们的责任还是可以免除的。
在 iOS 9 中,Apple 会阻止应用程序的不安全 HTTP 连接,除非将特定主机列入白名单。
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
出于明显的原因,WebView(s) 是否不受这些规则的约束,还是我们仍然希望将浏览器打开的主机列入白名单……包括给定页面的所有链接?
我不确定这是我们的责任还是可以免除的。
SFSafariViewController可以在没有 NSAppTransportSecurity 密钥的情况下显示 HTTP。
UIWebView和WKWebView需要上面提到的 NSAppTransportSecurity 键来显示 HTTP 页面。
根据 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进行了正确的添加,它们也不起作用。
这个问题最初是关于 iOS 9 的;但是,根据 Apple 的文档:
从 iOS 10.0 及更高版本开始,支持以下子项:
- NSAllowsArbitraryLoadsInWebContent
- ...
使用 NSAllowsArbitraryLoadsInWebContent,这样您就不需要将 WebView 可能加载的每个页面都列入白名单。
保留 NSAllowsArbitraryLoads 以保持与 iOS 9 的向后兼容性,并在此处启用 Xcode 8 项目 Info.plist 中的新设置:
如果您的应用程序(例如第三方网络浏览器)需要加载任意内容,Apple 提供了一种完全禁用 ATS 的方法,但我怀疑您最好谨慎使用此功能:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>