這篇說明的 connection reset 狀況是指您自行開發網站時遇到的狀況,並不是瀏覽特定網站遇到的 connection reset 異常,如果您瀏覽特定網站遇到此異常,您應該檢查一下您的防火牆或 proxy 設定,如果還是解決不了就通知該網站的管理員吧。

事情緣由

這幾天將系統開發到一個階段後,放到正式主機測試了一下,發現了一個很奇怪的問題,網頁瀏覽都非常正常,只有登入功能一直不能使用。這狀況非常奇怪,如果網路或正式機環境有問題,應該也是全部無法使用,而不是單單只有登入功能不能使用。

由於登入功能是使用 AJAX 實作,因此檢查一下 Server 是否有正確回傳值,發現似乎 Server 並沒有接收到 AJAX 發出的請求,接下來我使用 chrome 的開發者工具,僅發現簡單的 ERR_CONNECTION_RESET 的訊息而已,為此我還使用了 Wireshark 軟體擷取網路封包看了一下,發現出問題的連線 TCP 的三向交握都沒完成,以下就是我處理的過程,提供大家做參考。

處理過程

jQuery 版本
首先我懷疑是否是 jQuery 的 bug 或者我的 JavaScript 沒寫好,導致 AJAX 請求沒有發出去。要測試這個並不困難,我隨手寫了一個簡單的 AJAX 請求,發現一切正常,回傳值也都正常,所以可以初步排除並非 jQuery 的問題。
防火牆設定
在詢問 Google 搜尋一段時間後,發現很多文章都說明是被防火牆擋住了,於是我將 Client 端以及 Server 主機的防火牆都關閉了,問題依然存在。
關鍵字封鎖 (問題所在)
最後,正當我束手無策的時候,仔細思考了一下電腦網路架構,想到目前使用的電腦是走學術網路,連線會通過許多公家單位的機房,所以便猜測是否是某個網路節點封鎖了特定關鍵字。於是我將網頁表單送出的資料及資料變數名稱全部用亂數代替,果不其然居然就正常了。 雖然關鍵字封鎖是很常見的技術,不過真正遇到狀況時,第一時間還真不一定會想到是這個原因,所以提醒大家不要跟我一樣為此耗了半天的時間。