从SSL定制方案/协议访问?

我们的iOS应用程序使用自定义协议(NSURLProtocol)来直接管理加载UIWebview所需的某些数据。 这一直很好,直到iOS 9与XCode 7。

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

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

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

[blocked] https://example.com/path/redacted中的页面不允许显示来自mycustomprotocol://different.example.com/path/redacted的不安全内容。

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


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

解决此问题的最佳方法是将您的资源URL重写为以https开头:并使其全部位于您拥有的特定子域内,并永久禁止该子域的任何实际Web使用,然后使用该URL来确定您的URL协议应处理该URL,而不是使用URL方案。

有了这个说法, 提交一个错误,并要求提供一个API,将UIWebView和WKWebView中的自定义协议列为“潜在安全”。 在这种情况下,这是一件合理的事情。

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

链接地址: http://www.djcxy.com/p/5937.html

上一篇: Custom scheme/protocol access from SSL?

下一篇: NSURLProtocol and relative paths