概述

#

如果您的程式碼嘗試在 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>

我們建議您在釋出版本中這樣做。

附加資訊

#
  • 構建時配置是更改網路策略的唯一方法。它不能在執行時修改。
  • 本地主機連線始終允許。
  • 您只能為域允許不安全連線。不允許輸入特定的 IP 地址。這與平臺支援的內容一致。如果您想允許 IP 地址,唯一的選擇是在您的應用程式中允許明文連線。

時間線

#

已在版本:1.23 中實現
穩定版本:2.0.0
已在版本:2.2.0(提議)中撤銷

參考資料

#

API 文件:此更改沒有 API,因為對網路策略的修改是透過上面詳細介紹的特定於平臺的配置完成的。

相關 PR