跳至主要内容

iOS 和 Android 上默认禁用不安全的 HTTP 连接

摘要

#

如果您的代码尝试在 iOS 或 Android 上打开到某个主机的 HTTP 连接,现在将抛出 StateException,并显示以下消息

Insecure HTTP is not allowed by platform: <host>

请使用 HTTPS。

上下文

#

从 Android API 28iOS 9 开始,这些平台默认禁用不安全的 HTTP 连接。

通过此更改,Flutter 也会在移动平台上禁用不安全的连接。其他平台(桌面、Web 等)不受影响。

您可以按照平台特定的指南定义特定于域的网络策略来覆盖此行为。有关详细信息,请参阅下面的迁移指南。

与平台非常相似,应用程序仍然可以打开不安全的套接字连接。Flutter 不会在套接字级别强制执行任何策略;您将负责确保连接的安全。

迁移指南

#

在 iOS 上,您可以将 NSExceptionDomains 添加到应用程序的 Info.plist 中。

在 Android 上,您可以添加 网络安全配置 XML。为了让 Flutter 找到您的 XML 文件,您还需要在清单中的 <application> 标记中添加一个 metadata 条目。此元数据条目应包含名称:io.flutter.network-policy,并且应包含 XML 的资源标识符。

例如,如果您将 XML 配置放在 res/xml/network_security_config.xml 下,您的清单将包含以下内容

xml
<application ...>
  ...
  <meta-data android:name="io.flutter.network-policy"
             android:resource="@xml/network_security_config"/>
</application>

允许调试构建使用明文连接

#

如果要允许 Android 调试构建使用 HTTP 连接,可以将以下代码段添加到您的 $project_path\android\app\src\debug\AndroidManifest.xml 中

xml
<application android:usesCleartextTraffic="true"/>

对于 iOS,您可以按照 这些说明 创建 Info-debug.plist 并将其放在

xml
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

我们不建议您在发布版本中执行此操作。

其他信息

#
  • 构建时配置是更改网络策略的唯一方法。它不能在运行时修改。
  • 始终允许 localhost 连接。
  • 您只能允许对域的不安全连接。不支持 IP 地址作为输入。这与平台支持的保持一致。如果您想允许 IP 地址,唯一的选择是在您的应用程序中允许明文连接。

时间线

#

包含于版本:1.23
稳定版发布:2.0.0
撤销于版本:2.2.0(建议)

参考文献

#

API 文档:此更改没有 API,因为对网络策略的修改是通过上面详细说明的平台特定配置完成的。

相关 PR