iOS 和 Android 上默认禁用不安全的 HTTP 连接
摘要
#如果您的代码尝试在 iOS 或 Android 上打开到某个主机的 HTTP 连接,现在将抛出 StateException
,并显示以下消息
Insecure HTTP is not allowed by platform: <host>
请使用 HTTPS。
上下文
#从 Android API 28 和 iOS 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
下,您的清单将包含以下内容
<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 中
<application android:usesCleartextTraffic="true"/>
对于 iOS,您可以按照 这些说明 创建 Info-debug.plist
并将其放在
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我们不建议您在发布版本中执行此操作。
其他信息
#- 构建时配置是更改网络策略的唯一方法。它不能在运行时修改。
- 始终允许 localhost 连接。
- 您只能允许对域的不安全连接。不支持 IP 地址作为输入。这与平台支持的保持一致。如果您想允许 IP 地址,唯一的选择是在您的应用程序中允许明文连接。
时间线
#包含于版本:1.23
稳定版发布:2.0.0
撤销于版本:2.2.0(建议)
参考文献
#API 文档:此更改没有 API,因为对网络策略的修改是通过上面详细说明的平台特定配置完成的。
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-06-17。 查看源代码 或 报告问题。