全部產品
Search
文件中心

HTTPDNS:QT WebEngine接入DoH

更新時間:Sep 09, 2025

本文檔提供Qt WebEngine應用中配置和使用DNS over HTTPS (DoH)的關鍵程式碼片段和配置要點。

1. 前言

Qt WebEngine 從 Qt 6.6 版本開始支援 DNS over HTTPS (DoH) 功能,允許開發人員通過加密的 HTTPS 協議進行 DNS 解析,以解決 Web 應用程式遇到的 DNS 劫持問題。HTTPDNS 是阿里雲提供的移動解析服務,專門面向移動 APP 和 IoT 裝置,提供穩定、安全、精準的公網遞迴觤析服務。本文將介紹如何在 Qt WebEngine 應用中接入 HTTPDNS 的 DoH 服務。

2. 前提條件

在接入Qt WebEngine DoH 前,請您確保已經完成配置DoH服務

3. 接入配置

接入 HTTPDNS 的 DoH 服務主要通過 QWebEngineGlobalSettings::DnsMode API進行設定。

設定包含兩部分內容:

  • 安全模式(secureMode:決定 DoH 與 LocalDNS 的使用優先順序,控制在不同網路環境下的 DNS 解析策略和回退機制

  • 伺服器模板(serverTemplates:配置 DoH 服務列表,指定可用的 DoH 伺服器接入地址,支援多個伺服器以提供高可用性

範例程式碼如下:

// DoH 配置
QWebEngineGlobalSettings::DnsMode dnsMode;
dnsMode.secureMode = QWebEngineGlobalSettings::SecureDnsMode::SecureWithFallback;
dnsMode.serverTemplates = QStringList{
 "https://xxxx.com/dns-query{?dns}"
};
QWebEngineGlobalSettings::setDnsMode(dnsMode);
// 配置 DoH 後,建立 WebEngineView 並載入網頁
QWebEngineView *webView = new QWebEngineView();
webView->load(QUrl("https://www.example.com"));
webView->show();

4. 配置注意事項

  • DoH接入模板格式,必須包含{?dns}參數

    • 正確樣本:"https://xxxx.aliyunhttpdns.com/dns-query{?dns}"

    • 錯誤樣本:"https://dns.xxxx/dns-query" (缺少{?dns}參數)

    • 錯誤樣本:"https://1.1.X.X/dns-query?dns=" (參數格式錯誤)

  • DoH配置是全域生效

    • 通過QWebEngineGlobalSettings設定

    • 必須在建立任何QWebEngineView執行個體之前完成配置

    • 配置完成後,所有後續建立的WebEngineView都會自動使用DoH設定

  • 高可用配置

    • 推薦使用SecureWithFallback模式避免極端情況下 DoH 不可用影響業務

    • 配置多個DoH伺服器作為兜底方案,首個DoH服務使用 HTTPDNS,使用其他備用 DoH 作為容災備用,比如免費的公用 DoH 服務。

5. 總結

本文介紹了在 Qt WebEngine 應用中整合 DNS over HTTPS (DoH) 的完整方案,包括基礎配置、安全模式選擇和高可用部署策略。配置後可通過網路抓包查看 HTTPS 請求、檢查 DNS 日誌或進行網路故障測試來驗證 DoH 接入成功。推薦使用 SecureWithFallback 模式並配置多個 DoH 伺服器以確保生產環境的穩定性。