在 iOS 和 Android 上,不安全的 HTTP 連線預設為停用
摘要
#如果您的程式碼嘗試在 iOS 或 Android 上開啟與主機的 HTTP 連線,則現在會擲回 StateException
,並顯示以下訊息
Insecure HTTP is not allowed by platform: <host>
請改用 HTTPS。
背景資訊
#從 Android API 28 和 iOS 9 開始,這些平台預設會停用不安全的 HTTP 連線。
隨著這項變更,Flutter 也會在行動平台上停用不安全的連線。其他平台(桌面、網頁等)則不受影響。
您可以依照平台專屬的指南來定義特定網域的網路策略,藉此覆寫此行為。詳情請參閱下方的遷移指南。
如同這些平台,應用程式仍然可以開啟不安全的 Socket 連線。Flutter 不會在 Socket 層級強制執行任何策略;您必須自行負責確保連線安全。
遷移指南
#在 iOS 上,您可以將 NSExceptionDomains 新增至您應用程式的 Info.plist。
在 Android 上,您可以新增一個 網路安全性設定 XML。為了讓 Flutter 找到您的 XML 檔案,您還需要在您 Manifest 中的 <application>
標籤中新增一個 metadata
項目。這個 metadata 項目應該包含名稱:io.flutter.network-policy
,並且應該包含 XML 的資源識別碼。
例如,如果您將 XML 設定放在 res/xml/network_security_config.xml
下,您的 Manifest 將包含以下內容
<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。 檢視原始碼 或 回報問題。