前言
將遠端網頁伺服器 SSH Port Forwarding 到本地端後,Firefox、Safari 可以正常瀏覽該 port 的網頁,Chromium 的瀏覽器都不行(顯示 ERR_EMPTY_RESPONSE),這是為什麼呢?
追查
透過抓包
- 看了一下 loopback 封包,在 Chromium 送出 HTTP 請求後,馬上被回 FIN…
- 在 Firefox 送出 HTTP 請求後,有 ACK 也有 HTTP 回應
透過 SSH Verbose 模式
ssh -N -L -vvv 9738:127.0.0.1:9738 my_remote_PC
圖片中上半部是 Firefox 正常連結的 log,下半部是 Chrome 連線失敗的 log。
可以看到 Chromium 多了 TCP_NODELAY
與 O_NONBLOCK
,這兩個選項會使得 TCP 停用 Naggle 演算法(累積一些再傳送那個)與停用阻塞。
我猜 Chromium 沒收到東西就認為真的沒東西,所以可以看到 chan_shutdown
先發生,最後才有 free: direct-tcpip
,不過為時已晚 …
結論
只能說 Chromium 太激進求快了,目前沒查到幫瀏覽器關閉這兩個 TCP 選項的方式
comments powered by Disqus