我們在使用HttpWatch進行Web調試的過程中有時候會看到非HTTP Status Code(狀態碼)的值, 例如:(Aborted)。
(Aborted)是HttpWatch中定義的三種非HTTP Status Code的其中一種,這些狀態信息在HttpWatch中被用來表示服務器沒有對發出的請求返回任何Status Code:
- l (Aborted)
- l (Cache)
- l ERROR_*
最后的兩個值所表示的含義是顯而易見的。(Cache)用來表示請求中所返回的內容不是從服務器中取回的而是直接從瀏覽器的緩存中取回的。因此如果沒有與服務器進行真實的信息交換則服務器不會返回Status Code。另外一種是ERROR_*,它用來表示當IE瀏覽器請求數據時發生錯誤導致請求失敗。
(Aborted)表示的內容相對上面兩個要更加復雜一些,它發生在IE開始處理對指定URL的請求,但請求被中止的情形下。以下是幾種請求被中止的典型示例:
- 在頁面加載的過程中(例如:正在下載一個圖片)用戶點擊了頁面中的一個鏈接,或點擊了瀏覽器的“停止”按鈕。這種情況下IE會中止所有激活狀態的請求,HttpWatch中這些被中止請求的result會顯示(Aborted)。
- 當用戶觸發了某個元素的hover事件(hover時會發請求),而在請求的過程中鼠標移出了hover事件綁定的區域時。此時對於還未完成的請求會被IE強制丟棄。
- 有時候開發者會利用ajax去請求數據,但是卻沒有等待服務器返回數據而是繼續進行其它處理時,那些原本應該接收的請求會被IE瀏覽器強制丟棄。
其實上述問題的核心就是“服務器所接收的請求是否會被(強行)中止?”,這個問題的答案取決於請求何時會被丟棄。通過查看Httpwatch的timing chart可以清楚的看到請求被取消的時機。
下面就是一個請求在連接過程中被中止的例子:
上面的例子中由於請求還沒有到達Send階段因此服務器不會接收到客戶端所發出的請求
下面的這個被Aborted情形出現在IE瀏覽器在等待服務器返回請求結果的過程中
HttpWatch中之所以會定義上述三種信息主要是為了反映出用戶與網站見交互的一些信息(非Status Code),而不是表示請求發生了錯誤