本文檔提供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 伺服器以確保生產環境的穩定性。