使用Expo开发React Native应用,加载lh3.googleusercontent.com图片遇证书无效问题求解
解决iOS上加载lh3.googleusercontent.com图片时的证书错误问题
问题分析
你当前的NSAppTransportSecurity配置仅针对localhost设置了例外规则,但报错的域名是lh3.googleusercontent.com,该域名的证书验证失败,需要针对它添加对应的ATS例外配置,或者排查网络层面的证书干扰问题。
解决方案
1. 更新app.json中的ATS配置
修改app.json里的NSAppTransportSecurity部分,添加googleusercontent.com的例外规则,确保所有子域名(包括lh3.googleusercontent.com)的HTTPS请求能正常通过证书验证:
"NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true, "NSExceptionDomains": { "localhost": { "NSIncludesSubdomains": true, "NSExceptionAllowsInsecureHTTPLoads": true, "NSExceptionRequiresForwardSecrecy": true, "NSTemporaryExceptionAllowsInsecureHTTPLoads": true, "NSThirdPartyExceptionAllowsInsecureHTTPLoads": true, "NSThirdPartyExceptionRequiresForwardSecrecy": true, "NSTemporaryExceptionMinimumTLSVersion": "TLSv1.1", "NSRequiresCertificateTransparency": false }, "googleusercontent.com": { "NSIncludesSubdomains": true, "NSRequiresCertificateTransparency": false, "NSExceptionAllowsInsecureHTTPLoads": false, "NSExceptionRequiresForwardSecrecy": true } } }
NSIncludesSubdomains设为true,确保lh3.googleusercontent.com这类子域名也应用该规则- 保持
NSExceptionAllowsInsecureHTTPLoads为false,因为该域名本身是合法HTTPS服务,不需要允许不安全加载,仅调整证书验证相关适配规则
2. 重启开发环境使配置生效
修改配置后需要执行以下操作:
- 关闭当前Expo开发服务器,重新运行
expo start - 关闭iOS模拟器,重新打开并加载应用,确保新的ATS配置被正确读取
3. 排查网络代理干扰
如果上述步骤无效,可能是设备/模拟器使用了代理工具(如Charles、Fiddler),导致证书被代理工具替换引发验证失败:
- 关闭代理工具或移除模拟器中的代理设置
- 若需保留代理,需将代理工具的根证书添加到iOS模拟器的信任列表中
额外说明
虽然NSAllowsArbitraryLoads设为true理论上允许所有HTTP/HTTPS请求,但iOS的ATS规则中例外域的配置优先级更高,部分证书验证逻辑仍会生效,针对特定域名添加明确例外是更稳妥的做法。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

