Windows 10 - TCP 分段導致部分 HTML 響應
編輯2:根據評論,更新了從碎片到分割的問題。
編輯:我已將此問題範圍縮小到僅 Windows 10 —— 似乎 IE 強化是 2012 R2 上的問題,這讓我相信 8.1 也受到影響。原題內容如下:
我正在接收來自網路伺服器的分段 HTTP 響應。
第一個數據包(第一個圖像上的 709)如下所示:2 - 如您所見,它包含標題,然後是內容。第二個數據包(第一個圖像上的 710)看起來像這樣:3。其餘數據包與此問題無關,但它們包含其餘的 HTML 內容。
在 Wireshark 中檢查重組數據會顯示正確的 HTTP 響應:4,但是任何(瀏覽器或非瀏覽器)使用者區應用程序都會收到此響應:5。如您所見,看起來缺少第一個數據包中的標頭之後的 HTML 內容,而是從第二個數據包到最後一個數據包。更有趣的是,這只有在應用程序發送 HTTP/1.1 或 HTTP/1.0 請求時才會發生 - 發送 HTTP/1.2、HTTP/0.9、HTTP/2.0 甚至任何像“GET / AAA”這樣的任意數據都會導致網路伺服器響應 HTTP/1.1 和應用程序接收正確的數據:6. 值得一提的是,網路堆棧中的某些東西似乎正在嘗試對 HTTP 請求進行某種優化,但我無法找到有關此的任何資訊。該問題僅出現在 Windows 8+(或 8.1+,沒有要測試的任何 8 機器)上,包括伺服器版本。Windows 7 或更早版本或任何其他基於 *nix 的系統都沒有問題。這與 TP-Link 論壇( http://forum.tp-link.com/showthread.php?93626-TL-SG105E-v2-Web-interface-unresponsive-Config-utility-works)上可以看到的問題相同但是我很確定這是 Windows 實現在這種特定情況下失敗的問題(即使假設網路伺服器做的事情不正確,這也適用於較舊的 Windows 和 *nix 系統)。
我對任何建議持開放態度,坦率地說,在這一點上我覺得我快瘋了。
因此,對於任何尋求答案的人來說——事實證明 David Schwartz 是對的,問題出在安全軟體上,但它似乎可以歸類為 Bitdefender 的錯誤——即使在完全禁用它之後也沒有任何變化——只是解除安裝它給出了正確的結果。似乎它的防火牆 WFP 驅動程序 (bdfwfpf.sys) 始終在工作,無論您安裝了何種設置和軟體包(我所安裝的那個沒有防火牆功能)。這對我來說似乎非常激進,因此我的解決方案同樣激進——刪除 WFP 防火牆驅動程序文件並鎖定相關系統資料庫項的權限。
這可能是兩個錯誤的組合:伺服器發送無效響應和 AV 通過破壞它來處理這個錯誤響應。伺服器發送帶有程式碼 401 但沒有
WWW-Authenticate
標頭的響應。根據HTTP 標準,這是無效的:響應必須包含一個 WWW-Authenticate 頭欄位(第 14.47 節),其中包含適用於所請求資源的質詢。
需要此
WWW-Authenticate
包含領域的標頭,以便瀏覽器可以提示使用者提供此領域的憑據或使用記憶體的憑據。不發送WWW-Authenticate
而是發送甚至包含腳本的 HTML 頁面絕對是伺服器的錯誤行為。請注意,響應程式碼 401 必須僅在應使用瀏覽器內置身份驗證對話框並且需要提供領域時使用。如果一個人在 HTTP 之外建構自己的身份驗證系統(即在這種情況下似乎是 HTML 內的典型登錄),則必須使用響應程式碼 200。