NSAllowsArbitraryLoads设为Yes时,NSExceptionDomains的作用是什么?
ATS配置疑问解答
先贴出你的info.plist ATS配置代码:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>https://test.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>
1. NSAllowsArbitraryLoads设为Yes时,配置NSExceptionDomains的意义
当NSAllowsArbitraryLoads设为YES时,全局ATS规则是完全放开的——所有HTTP请求、不符合ATS要求的HTTPS请求(比如低版本TLS、不支持前向保密)都能正常发起。
这时配置NSExceptionDomains的核心作用是给特定域名定制更精准的ATS规则,而非继续放宽。比如你配置里的test.com:
- 全局已经允许所有请求,但你给这个域名单独指定了最低TLS版本为1.2,同时关闭前向保密要求;
- 这种配置是给特定域名设置专属规则,既可以让它在全局宽松的基础上满足某些必须的安全要求,也可以针对该域名的服务器情况调整规则(比如服务器不支持前向保密,就单独关闭这个要求)。
简单说:全局是“无限制”,例外域是给特定域名“加限制/定制规则”,而非重复放宽。
2. 配置例外域后,非ATS合规且不在例外域的URL是否允许?
允许。NSAllowsArbitraryLoads=YES的全局规则优先级高于例外域,例外域仅作用于指定域名,其他域名依然遵循全局的完全放开规则——不管是否符合ATS要求,都能正常发起请求。
3. 移除NSExceptionDomains后,是否所有不安全URL都会被允许?
是的。移除后,整个ATS配置只剩NSAllowsArbitraryLoads=YES,所有HTTP请求、不符合ATS标准的HTTPS请求(比如TLS版本低于1.2、不支持前向保密等)都会被系统允许,没有任何额外限制。
4. 保留例外域的话,规则是不是仅适用于指定域?
没错。例外域里的所有规则(包括开启NSIncludesSubdomains后的子域名)只对指定的域名生效,其他域名完全不受例外域规则影响,依然遵循NSAllowsArbitraryLoads=YES的全局规则。
比如你配置里的规则仅作用于test.com及其所有子域名,其他域名比如example.com还是完全放开,不需要符合任何ATS要求。
内容的提问来源于stack exchange,提问作者CuriousMan
相关产品推荐
相关产品推荐

