iOS 9 … WebView是免除应用程序传输安全例外(ATS)规则,阻止不安全的HTTP主机?

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

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

由于显而易见的原因,WebView是否免除这些规则,还是我们仍然期望将浏览器打开的主机列入白名单…包括给定页面的所有链接?

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

SFSafariViewController可以显示没有NSAppTransportSecurity密钥的HTTP。

UIWebViewWKWebView需要上面提到的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的; 不过,根据苹果的文件 :

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

  • NSAllowsArbitraryLoadsInWebContent

使用NSAllowsArbitraryLoadsInWebContent,以便您不需要白色列出WebView可能加载的每个页面。

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

如果您的应用程序(例如第三方Web浏览器)需要加载任意内容,Apple提供了一种完全禁用ATS的方法,但是我怀疑您谨慎使用此function是明智的做法:

 <key>NSAppTransportSecurity</key> <dict> <!--Include to allow all connections (DANGER)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>