Http中except頭100-continue造成請求變慢的問題

http,except,100-continue,timeout,請求。

作者:草小誠([email protected]
轉載請注原文地址:https://blog.csdn.net/cxcjoker7894/article/details/103993527

近期生產環境的一次更新,忽然造成了隊列大規模積壓,最後發現原因是請求方(PHP端)更換了http庫,使用libcurl發起POST請求的時候,如果content-length 過大,會攜帶except=100-continue這個頭,而根據協議,服務端如果收到這個頭,會先返回100表示願意接收請求數據,再開始傳輸。
關於Except頭:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Expect

Expect 是一個請求消息頭,包含一個期望條件,表示服務器只有在滿足此期望條件的情況下才能妥善地處理請求。
規範中只規定了一個期望條件,即 Expect: 100-continue, 對此服務器可以做出如下回應:

100 如果消息頭中的期望條件可以得到滿足,使得請求可以順利進行的話,
417 (Expectation Failed) 如果服務器不能滿足期望條件的話;也可以是其他任意表示客戶端錯誤的狀態碼(4xx)。

例如,如果請求中 Content-Length 的值太大的話,可能會遭到服務器的拒絕。
常見的瀏覽器不會發送 Expect 消息頭,但是其他類型的客戶端如cURL默認會這麼做。

加上這個頭之後,相當於由一次請求變成了兩次請求,極大的拖慢了響應速度,本來穩定0.3秒返回的接口,經常會跳到0.6秒,偶爾還會到1秒以上,直接導致了隊列的積壓。
唯一的辦法就是在請求方手動設置刪除這個頭,即解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章