Skip to content
All writing Part 02 of 12 · 在容器裡遙控 Chrome 的完整路由
Engineering · 2 min read

Chrome DevTools Protocol:兩步握手,缺一不可

CDP 透過兩階段連線遙控 Chrome:先用 HTTP 拿 GUID,再用 WebSocket 送指令。兩步必須打到同一支 Chrome。

Chrome 的遙控頻道

CDP 是程式遙控 Chrome 的通道。Puppeteer、Playwright、chromedp 都靠它。名字裡有「Debug」,但它不是拿來抓 bug 的。它是 Chrome 的遙控頻道,名字從 DevTools 時代留下來。

前置知識:IP、Port、localhost

兩階段連線

CDP 需要兩步。兩步都必須打到同一支 Chrome。

你的程式(Go / Puppeteer) 第一步 HTTP GET /json/version Chrome 回覆:{ "webSocketDebuggerUrl": "ws://.../abc-123" } 第二步 WebSocket 連到 /devtools/browser/abc-123 送指令:導航、截圖、執行 JavaScript Chrome(debug port)

第一步是普通 HTTP 請求。第二步是 WebSocket(持久連線)。各自是獨立的 TCP 連線。

GUID:每支 Chrome 的身分證

abc-123 是一組 GUID(Globally Unique Identifier)。每支 Chrome 啟動時生成一組。一組 GUID 只開一條 WebSocket。不同的 Chrome 有不同的 GUID,打錯回 404。

/json/version 有兩個消費者

CDP 客戶端 GET /json/version → 讀 GUID → 開 WebSocket K8s Readiness Probe wget /json/version > /dev/null → 只看 HTTP 200 → 丟掉回覆內容

Probe 丟掉回覆內容,把 /json/version 當健康檢查用。GUID 只對 CDP 客戶端有意義。

「兩步 = 兩條獨立的網路連線。Load balancer 可以把它們分到不同 Pod。一分就壞。」


參考來源:

Related: 接著看 Chrome 128 鎖死遠端除錯發生了什麼,了解兩步設計怎麼造成 GUID 競爭,或回到系列總覽

Tags #kubernetes #chrome-devtools #containers
// connect

Be brave | Be wise | Be grateful

21 BreakinCode

// elsewhere
LinkedInMedium (lang: en)Youtube
wh:~$William Hung· © 2026 Taipei · GMT+8 · Available for collaboration