0

我正在尝试将 ATS 配置为允许从我的域加载 http,但是使用下面的 plist 设置,它仍然阻止访问图像请求(但奇怪的是,不是 http 'POST' 消息)。如果我启用 Allow Arbitrary Loads 它工作正常。获取图像的代码使用 NSURLConnection sendAsynchronousRequest 和(例如) url http://www.my-domain.com/ImageStore/aFolder/bfolder/xyz.jpg。我正在使用最新更新从模拟器运行。我找不到其他人报告类似的问题......我做错了什么?

警告信息:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 文件配置临时例外。

info.plist 设置:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>my-domain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubDomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
4

1 回答 1

1

您正在正确设置 NSAppTransportSecurity 的全局设置。我已经包含了一个可以在我拥有的应用程序中运行的版本。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>my-domain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

来自 iOS 9.0 的发行说明

应用传输安全

应用传输安全 (ATS) 在应用与其后端之间的安全连接中强制执行最佳实践。ATS 可防止意外泄露,提供安全的默认行为,并且易于采用;它在 iOS 9 和 OS X v10.11 中也默认开启。无论您是创建新应用还是更新现有应用,都应尽快采用 ATS。

如果您正在开发一个新应用程序,您应该只使用 HTTPS。如果您有一个现有的应用程序,您现在应该尽可能多地使用 HTTPS,并制定一个计划以尽快迁移您的应用程序的其余部分。此外,您通过更高级别 API 进行的通信需要使用具有前向保密性的 TLS 版本 1.2 进行加密。如果您尝试建立不符合此要求的连接,则会引发错误。如果您的应用需要向不安全的域发出请求,您必须在应用的 Info.plist 文件中指定此域。

Apple在 Networking with NSURLSession的 WWDC 视频中也提到了 ATS

于 2015-12-15T18:00:13.663 回答