首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS WebView 無法加載網頁:ATS (App Transport Security) 阻擋 HTTP/非安全連接

     編輯:程式設計綜合問答

現象

Xcode 7.0.1 / Swift 2.0 代碼:

var url = NSURL(string: "https://www.baidu.com")!
webview.loadRequest(NSURLRequest(URL: url))
// 無報錯,但頁面空白

根本原因:ATS (App Transport Security)

iOS 9+ 默認**強制 HTTPS** 且要求 TLS 1.2+、前向保密。若服務器不符合要求(或加載 HTTP),系統網絡層直接阻斷,WebView 不報錯只顯示空白。

解決方案:Info.plist 配置例外

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>  <!-- 允許任意負載(開發/舊項目臨時用) -->
    <!-- 生產環境建議精確域名例外 -->
    <key>NSExceptionDomains</key>
    <dict>
        <key>baidu.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

配置對比

設置適用場景安全性
NSAllowsArbitraryLoads = YES開發調試、臨時兼容、舊項目低,App Store 審核需說明理由
NSExceptionDomains 精確域名生產環境、已知安全域名高,符合 ATS 原則
完全符合 ATS(HTTPS+TLS1.2+)新項目、標準合規最高,無需例外

驗證步驟

  1. 修改 Info.plist 後 **Clean Build Folder (Shift+Cmd+K)** 重新構建。
  2. 真機運行(模擬器網絡策略可能不同)。
  3. 若仍失效,檢查 NSURLSession 委托方法 didReceiveChallenge 是否攔截。

Swift 3+/WKWebView 現代寫法

import WebKit
let webView = WKWebView()
if let url = URL(string: "https://www.baidu.com") {
    webView.load(URLRequest(url: url))
}
// 同樣受 ATS 管控,需同樣配置 Info.plist

核心提示:**iOS 9+ 網絡請求默認走 ATS,WebView/NSURLSession/WKWebView 同樣受限**,Info.plist 配置例外是標準解法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved