0

使用 XCode7/Swift2 并尝试加载网页时,我一直被 App Transport Security (ATS) 阻止——原因似乎是 ATS 不适用于 .ninja 网络扩展。

意思是,您可以添加一个例外,domains.com您可以在 web 视图中访问该站点。但是,您不能为 添加例外domains.ninja,尽管这是一个有效的网址。我已经对此进行了全面测试。

现在,我能够从 somewebsite.ninja 加载内容的唯一方法是,如果我在 Info.plist 文件中完全关闭 ATS(NSAppTransportSecurity > NSAllowsArbitraryLoads > YES),但我知道这不是正确的做法。我还担心,当我在完成后将我的应用程序提交到应用程序商店时,这可能会导致问题。

有谁知道如何为 .ninja 域添加 ATS 例外?

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domains.com</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
            <key>domains.ninja</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

以上将允许您在 web 视图中加载 domain.com 而不是 domain.ninja,即使键/选项与域名扩展名完全相同。

4

1 回答 1

1

我能够domains.ninja加载页面,UIWebView但我必须包含页面引用的所有其他域——各种分析、CDN 和跟踪站点。

我的 info.plist 的摘录是 -

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domains.ninja</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.geoplugin.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>marketo.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>googleapis.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>netdna.bootstrapcdn.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.google-analytics.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>mktoresp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>gstatic.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

因此,最后通常只关闭 ATS 并为支持 TLS 的域添加例外可能更简单。

于 2015-10-12T07:42:46.723 回答