[轉帖]如何判斷網站請求是否響應完畢?
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
:如何判斷網站請求是否響應完畢? 某個網站,通過瀏覽器去訪問則會一直在加載中,直到超時。為什么這個網站會一直加載(頂部狀態欄轉圈),但是頁面展示正常?
瀏覽器不需要等待頁面完全加載完才去渲染。 所謂的“頁面加載”實質就是一個 HTTP 請求。HTTP 雖然是一個文本協議,但也是基于 Socket 流式傳輸的。既然是流式的,那服務端就完全可以先只發送一部分數據、但是卻不關閉這個流,這樣客戶端會認為沒有接收完而選擇繼續等待,直到超時。 當然了,這是對于 HTTP/1.1 之前(先忽略 Keep-Alive,它不是重點)。在 HTTP/2 有了多路復用之后,多個 HTTP 請求底下對應的可能是同一個 Socket,這樣就不能單純地把“Socket 關閉”和“響應接收完畢”劃等號了 —— A 請求的響應接收完了、B 請求的響應可未必也完了,此時 Socket 并不會關閉。 幸好制訂 HTTP 協議時早就考慮好了和底層協議脫鉤的事情,它是有 那么反過來想,如果服務端返回了一個錯誤 你可以用 Wireshark 之類的抓包看一下(需要直接抓 TCP,而不是 DevTools/Fiddler/Charles 這種基于 HTTP 的,因為如上文所言,這個 HTTP 報文會被認為是“不完整的”,所以這些基于 HTTP 的抓包工具是不能正確解析的),觀察一下這個請求的實際收到的字節數是不是小于 雖然未完整接收,但瀏覽器會先渲染接收到的那部分HTML。 比如我用 Fiddler 攔截了 www.baidu.com 的請求,把它的 Content-Type 改成了 999999,然后瀏覽器就會一直轉圈、但是會先渲染收到的那部分 HTML : 該文章在 2023/8/29 10:37:07 編輯過 |
關鍵字查詢
相關文章
正在查詢... |