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。
第一步是普通 HTTP 請求。第二步是 WebSocket(持久連線)。各自是獨立的 TCP 連線。
GUID:每支 Chrome 的身分證
abc-123 是一組 GUID(Globally Unique Identifier)。每支 Chrome 啟動時生成一組。一組 GUID 只開一條 WebSocket。不同的 Chrome 有不同的 GUID,打錯回 404。
/json/version 有兩個消費者
Probe 丟掉回覆內容,把 /json/version 當健康檢查用。GUID 只對 CDP 客戶端有意義。
「兩步 = 兩條獨立的網路連線。Load balancer 可以把它們分到不同 Pod。一分就壞。」
參考來源:
Related: 接著看 Chrome 128 鎖死遠端除錯發生了什麼,了解兩步設計怎麼造成 GUID 競爭,或回到系列總覽。