来自SSL的自定义方案/协议访问?

时间:2016-01-18 21:29:54

标签: https uiwebview ios9 nsurlprotocol

我们的iOS应用程序使用自定义协议(NSURLProtocol)直接管理加载UIWebview所需的某些数据。这在使用XCode 7的iOS 9之前一直运行良好。

现在,由于主站点是使用HTTPS加载的,因此UIWebview在引用自定义协议资源时会抛出错误,因为它认为它不安全(事实上,它不是,我们使用SSL加载它,而不是https:/ /)。该应用程序已经构建了“允许任意加载”,因为我们还有一些其他需要的东西,我本以为这继承了NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads,它似乎正在遇到,但谁知道。

有没有办法说服iOS 9可以从HTTPS访问我们的自定义协议?注意 - 我们不在UIWebview中使用iframe或类似的东西 - 使用Ajax / XHR请求这些资源,并调用应用程序的NSURLProtocol并接管加载数据并返回响应。

自定义方案也列在URL类型中,但这似乎不会改变任何行为(输入或输出,相同的错误)。这是具体的错误:

  

[已屏蔽]不允许https://example.com/path/redacted上的页面显示来自mycustcomprotocol的不安全内容://different.example.com/path/redacted。

编辑: 下载了Xcode 6.4,重建了应用程序,它似乎在iOS 9.x上运行正常,自定义协议没有问题。显然,这不是这是一个长期的解决方案。希望有人仍然对Xcode 7 +中的解决方法有所了解。

1 个答案:

答案 0 :(得分:1)

我怀疑这个问题是,https提供的网页通常不允许包含从任何URL加载的资源,这些URL的方案不在特定的已知安全方案列表中(至少在较新的浏览器中)。

解决此问题的最佳方法是重写您的资源网址,以https开头:并将它们全部放在您拥有的特定子域中,并永久禁止该子域的任何实际网络使用,然后使用它确定您的URL协议是否应该处理URL,而不是使用URL方案。

话虽如此,提交错误并要求API将您的自定义协议列入白名单,以便在UIWebView和WKWebView中“具有潜在的安全性”。在这种情况下,这是合理的事情。

有关混合内容的详细信息,请参阅http://www.w3.org/TR/mixed-content/