iOS9不会从安全页面(SSL / HTTPS)加载不安全的资源

我正尝试使用https:// URL将页面加载到iOS9上的UIWebView。 加载的页面包含来自不安全服务器的CSS和图像。

例如加载的页面: https ://www.example.com/,其中包含样式表http://www.example.com/style.css和图片http://www.example.com/image.jpg

如果原始页面通过不安全的连接(常规http)加载,则一切正常。 一切都可以通过HTTPS和HTTP在iOS8上运行。

我在应用程序PLIST文件中将NSAppTransportSecurity设置为NSAllowsArbitraryLoads:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

虽然通过HTTPS加载页面时,图像加载正常,但CSS文件不是。 看起来像UIWebView块从安全页面加载不安全的资源。

是否有任何UIWebView的设置,允许通过不安全的连接加载CSS?


这与ATS无关。 WebKit强制执行混合内容策略,当主机页面通过https提供服务时,不允许访问某些“活动”内容(JS,CSS等)的内容以通过不安全的连接进行加载。

如果您在Inspector中检查您的页面,您会在错误面板中看到这个报告。


跟进:您无法关闭混合内容阻止。 允许不安全的CSS或JS将整个页面的安全性降低到最不安全的资源。 如果您必须通过http加载css / js,则解决方案是通过http加载整个页面。 这样,用户看到的UI就能正确反映内容的安全性。


在您的info.plist中,您需要添加以下App Transport Security密钥:

NSAppTransportSecurity                                      Dictionary
    NSAllowsArbitraryLoads                                  Boolean       YES
    NSExceptionDomains                                      Dictionary    
        **YOUR-DOMAIN-HERE**                                Dictionary
            NSExceptionAllowsInsecureHTTPLoads              Boolean       YES
            NSIncludesSubdomains                            Boolean       YES
            NSThirdPartyExceptionAllowsInsecureHTTPLoads    Boolean       YES

希望这应该适合你。


应用程序传输安全性已在iOS9发行版中修 现在,您的应用程序可以安全地连接到不安全的连接。 和iOS部队进行安全连接。 这可能与您的情况有冲突。

Apple文档

如果您的应用需要向不安全的域请求,则必须在应用的Info.plist文件中指定此域

所以我认为这可能会在为网页加载.css文件时造成问题。

因此,请尝试在info.plist指定您的域,并检查是否加载了.css文件。

编辑:


Spotlight:您需要在info.plist添加更多密钥。

看看这个关键NSThirdPartyExceptionAllowsInsecureHTTPLoads这允许一个不受开发人员控制的服务域,并通过传递不安全的资源为传输层添加一个例外。

以下是用于为App Transport Security添加密钥的结构:

在这里输入图像描述

有关所有密钥的更多详细信息和解释,请查看本说明 - App Transport Security Technote

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

上一篇: iOS9 does not load insecure resources from a secure page (SSL/HTTPS)

下一篇: How can I add NSAppTransportSecurity to my info.plist file?