本文檔介紹如何在electron中使用DoH
1. 前言
Electron 是一個基於 Chromium 和 Node.js 的跨平台應用開發架構,開發人員可以使用 JavaScript / HTML / CSS 來構建傳統型應用程式。
Electron 預設使用系統的 Local DNS 解析網域名稱,Local DNS的劫持、調度不精準、解析延遲高等問題會導致應用內的網路請求會失敗或被導向錯誤的服務節點,本文將介紹如何通過 DoH 解決Electron 的 DNS 解析問題。
2. 前提條件
通過 DoH 接入 Electron 前,請您確保已經完成配置DoH服務。
3. 接入方案
Electron 官網提供了標準的DoH接入方案,只需要在應用初始化後,通過app.configureHostResolver配置 HTTPDNS 的 DoH 連結,就可以完成接入。
const { app } = require('electron')
app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'automatic',
secureDnsServers: [
// 您的 DoH 服務鏈結接
'https://xxx.aliyunhttpdns.com/dns-query'
]
})
})Electron 應用中的網路請求可以使用 Node.js 網路棧或 Chromium 網路棧。通過當前介面配置的 DoH 服務僅對使用 Chromium 網路棧的請求生效,包括:
渲染進程(網頁):頁面中的 fetch、XMLHttpRequest、資源載入等。
主進程:使用 Electron 內建 net 模組、BrowserWindow.loadURL() 等。
preload 指令碼:使用瀏覽器 API(fetch、XMLHttpRequest)等。
Chromium 核心會使用內建的探測網域名稱 www.gstatic.com 對 DoH 可用性檢查,在探測完成前,DoH 被視為“未確定可用”,為保證 DoH 服務正常工作,請確保 www.gstatic.com 網域名稱添加到解析列表中或允許所有網域名稱解析。
Chromium 核心在“未確定可用”時,此時
secureDnsMode選擇不同的模式會有不同的行為:automatic模式:當 DoH 未確定可用或服務不可用時,Chromium 會自動降級到 Local DNS,探測通過後自動切換回 DoH。secure模式:強制使用 DoH,等待DoH探測結果,若沒有可用的 DoH 端點,不會降級到 Local DNS,為避免極端情況下,DoH服務不可用導致您的業務不可用,建議在 secure 模式下添加其他 DoH 兜底,比如免費 DoH 服務等。
4. 樣本Demo
效果

demo代碼
const { app, BrowserWindow } = require('electron'); app.whenReady().then(async () => { try { // 配置DNS over HTTPS - 支援自動容錯移轉 app.configureHostResolver({ secureDnsMode: 'automatic', // DoH失敗時自動回退到本地DNS secureDnsServers: [ // 這裡填入您的實際DOH連結 'https://xxxx.aliyunhttpdns.com/dns-query' ] }); console.log('✅ DoH配置成功:自動容錯移轉已啟用'); } catch (error) { console.error('❌ DoH配置失敗:', error); } // 建立視窗 const mainWindow = new BrowserWindow({ width: 1000, height: 700 }); mainWindow.loadURL('https://www.aliyun.com'); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } });
5. 總結
通過本文檔介紹的步驟,您可以成功在 Electron 架構中整合DNS over HTTPS (DoH)功能,從而顯著提升應用程式的安全性和使用者隱私保護能力。配置後可通過將手機 WIFI 網路的 DNS 伺服器設定為一個無效地址,觀察業務請求是否依然能夠正常發起,以此判斷 DoH 是否接入成功。