Chromium 透過 SSH Port Forwarding 造訪網站失敗調查

前言

將遠端網頁伺服器 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。

/img/chromium_based_failed_via_ssh_port_forwarding_investigation/log_1.jpep

可以看到 Chromium 多了 TCP_NODELAYO_NONBLOCK,這兩個選項會使得 TCP 停用 Naggle 演算法(累積一些再傳送那個)與停用阻塞。

我猜 Chromium 沒收到東西就認為真的沒東西,所以可以看到 chan_shutdown 先發生,最後才有 free: direct-tcpip,不過為時已晚 …

結論

只能說 Chromium 太激進求快了,目前沒查到幫瀏覽器關閉這兩個 TCP 選項的方式


comments powered by Disqus