首页 > 解决方案 > 在 Swift 中使用重定向 url 时的 ATS 策略问题

问题描述

例如,我正在使用此链接来加载链接。尽管该链接是 http 链接,但它会被重定向到 https 链接。它在浏览器中工作。但是,一旦我让我的 iOS 应用程序加载资源,它就会说“无法加载资源,因为应用程序传输安全策略需要使用安全连接。”。

我正在使用这个库来加载图片。不支持 Swift 加载 https 资源吗?我可以想到 ATS 会阻止与服务器的连接,因此甚至无法接收重定向。

我将非常感谢对此的任何想法。

基督教

标签: swifthttphttpsapp-transport-security

解决方案


虽然您当然可以使用 Kishan 和 Johnson 提供的解决方案禁用整个 ATS,但如果您知道要尝试加载的 http 资源的域,那么您有更好的选择。有关为什么完全禁用 ATS 不是最佳主意的详细信息,请参阅这篇文章

更好的选择是:

  1. 如果你知道 http 资源总是会给你一个重定向到相同的 https:// url,为什么不在你的代码中简单地使用 https:// url。如果重定向是动态的,这将不起作用,但是如果您的代码试图加载http://www.example.com/resource并且总是重定向到https://www.example.com/resource,为什么不只是更改您的代码以转到 https 版本。

  2. 仅为需要允许非 https 连接的域禁用 ATS。这允许您只允许您知道不支持 https 的域的 http 连接,从而更好地保护您的应用程序用户。info.plist 中的 ATS 设置看起来像这样:

域特定 ATS 设置的 Info.plist 设置

  1. 当且仅当您的 url 由您无法控制的数据驱动时(即这些 url 中的域可以是任何东西),您将需要禁用所有 ATS,Apple 最终可能希望您提供禁用它的理由。最初他们打算让所有禁用 ATS 的应用程序都经过额外的理由请求流程,但他们最近没有提到这一点。这应该是最后的手段。

用于完全禁用 ATS 的 ATS 设置

老实说,看看你的例子 UR


推荐阅读