HTTP 請(qǐng)求 EXPECT 問題

問題描述:

.net 發(fā)送http 請(qǐng)求 采用兩種方式(httpclient/ HttpWebRequest),
對(duì)方接口 是采用java 搭建的服務(wù)器,

但在訪問接口 時(shí) ,總是得不到 響應(yīng)。 但是采用postman 的 話 又可以得到響應(yīng)結(jié)果。

于是采用fiddler 進(jìn)行 http 請(qǐng)求抓包。 對(duì)比 兩個(gè) 請(qǐng)求的 請(qǐng)求頭信息。
發(fā)現(xiàn) postman 中沒有 Expect:100-continue 這個(gè)請(qǐng)求頭 ,但是 自己的 發(fā)起的請(qǐng)求中帶有這個(gè)。

于是 關(guān)閉掉 這個(gè)請(qǐng)求頭
(httpwebrequest: myRequest.ServicePoint.Expect100Continue = false;)
(httpclient: httpClient.DefaultRequestHeaders.ExpectContinue = false;)

然后重新 發(fā)起請(qǐng)求,然后 就獲得到了 響應(yīng)

(說明:請(qǐng)求數(shù)據(jù)只有207 字節(jié),采用post方式)

于是在網(wǎng)上查找 Expect:100-continue 作用是什么:

它可以讓客戶端在發(fā)送請(qǐng)求數(shù)據(jù)之前去判斷服務(wù)器是否愿意接收該數(shù)據(jù),如果服務(wù)器愿意接收,客戶端才會(huì)真正發(fā)送數(shù)據(jù),這么做的原因是如果客戶端直接發(fā)送請(qǐng)求數(shù)據(jù),但是服務(wù)器又將該請(qǐng)求拒絕的話,這種行為將帶來很大的資源開銷。所以為了避免這種情況,libcurl在發(fā)送大于1024字節(jié)的POST請(qǐng)求時(shí)采用了這種方法,但是相對(duì)的,它會(huì)引起請(qǐng)求延遲的加大,另外并不是所有的server都會(huì)正確處理并且應(yīng)答”100-continue“,比如lighttpd,就會(huì)返回417”Expectation Failed“,造成請(qǐng)求邏輯出錯(cuò)。

如果確定服務(wù)器不會(huì)拒絕1024個(gè)字節(jié)以上的POST請(qǐng)求,就可以不使用該方法而且也可以避免以上提到的兩個(gè)副作用。

特此 記錄該問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容