博客 / 詳情

返回

libcurl post請求報錯:Server returned nothing (no headers, no data)

問題描述:

同一份libcurl post請求代碼,在ubuntu下可以正常執行,而在windows下,curl_easy_perform卻返回 52

curl_easy_strerror(52)返回: Server returned nothing (no headers, no data)

原因:

在windows下,libcurl自動添加了一個請求頭 Expect: 100-continue

HTTP/1.1 協議裏設計 100 (Continue) HTTP 狀態碼的的目的是,在客户端發送 Request Message 之前,HTTP/1.1 協議允許客户端先判定服務器是否願意接受客户端發來的消息主體(基於 Request Headers)。

即, 客户端 在 Post(較大)數據到服務端之前,允許雙方“握手”,如果匹配上了,Client 才開始發送(較大)數據。

這麼做的原因是,如果客户端直接發送請求數據,但是服務器又將該請求拒絕的話,這種行為將帶來很大的資源開銷。

如果 client 預期等待“100-continue”的應答,那麼它發的請求必須包含一個 " Expect: 100-continue" 的頭域!

libcurl自動添加的請求頭 Expect: 100-continue,會導致請求頭和請求體分開兩次發送。

但並不是所有的 Server 都會正確實現 100-continue 協議。

解決辦法:

在libcurl的post請求代碼中刪除請求頭 Expec 即可,確保請求頭和請求體一起發送

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.