查看“在 Burp Suite 中使用 HTTP/2”以找出為什么存在剝離連接標頭的選項,我發現原因是“這是因為許多 HTTP/2 服務器將拒絕包含此標頭的請求。”。
有什么具體原因嗎?
uj5u.com熱心網友回復:
是的,HTTP/2 規范在第 8.1.2.2 節中指出:
HTTP/2 不使用 Connection 頭欄位來指示特定于連接的頭欄位;在該協議中,連接特定的元資料通過其他方式傳送。端點不得生成包含特定于連接的頭欄位的 HTTP/2 訊息;任何包含特定于連接的頭欄位的訊息必須被視為格式錯誤
話雖如此,許多服務器更加寬容并容忍Connection標頭的存在,盡管它們被忽略了。
此限制的原因是Connection標頭在 HTTP/1.1 請求中有意義,其中一次通過 TCP 連接發送一個請求。
在像 HTTP/2 這樣的多路復用協議中,請求(HTTP/2 流)攜帶連接頭是沒有意義的,因為在同一個 TCP 連接上可能有多個請求。
作為一個極端的例子,如果你有一個 HTTP/2 流Connection: close和另一個并發的 HTTP/2 流Connection: keep-alive(盡管keep-alive在 HTTP/1.1 中已經被棄用),那么 HTTP/2 實作應該做什么?按照第一個流的建議關閉連接,還是按照第二個流的建議保持打開狀態?
顯然,這不適用于 HTTP/2 等多路復用協議,這就是實作拒絕此類請求的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385056.html
