我正在寫一個簡單的HTTP服務器,它將接受大部分來自cURL的PUT請求作爲客戶端,而我在處理Expect: 100-continue
標題時遇到了一些問題。如何處理「100個繼續」HTTP消息?
據我瞭解,服務器應該讀頭,發回連接上一個HTTP/1.1 100 Continue
響應,讀取流達價值上Content-Length
,然後發回真正的響應代碼(通常HTTP/1.1 200 OK
但任何其他有效的HTTP答案應該這樣做)。
那麼,這正是我的服務器所做的。問題是,顯然,如果我發送100 Continue
答案,cURL將無法報告任何後續的HTTP錯誤代碼,並假定上傳成功。例如,如果由於內容的性質(發生基本數據檢查)而導致上傳被拒絕,我希望呼叫客戶端檢測問題並採取相應措施。
我錯過了一些明顯的東西嗎?
編輯:這裏是捲曲的示例輸出與輔助頭包含錯誤:
> PUT /test1%2Epdf HTTP/1.1
> Authorization: Basic xxxx
> User-Agent: curl/7.20.0 (i386-pc-win32) libcurl/7.20.0 OpenSSL/0.9.8l zlib/1.2.3
> Host: localhost
> Accept: */*
> Content-Length: 24
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 415 Unsupported Media Type
< Connection: close
< Content-Type: text/xml
< Content-Length: 289
<
是不是你需要'HTTP/1.1 100 Continue'後的空白行? – YOU 2010-06-03 09:57:34
有一個。它沒有被記錄的事實似乎是cURL的顯示問題。 – Stephane 2010-06-03 13:57:54
只是爲了澄清,發回一個完全有效的HTTP響應('HTTP/1.1 100 Continue \ r \ n \ r \ n')不只是字符串HTTP HTTP 1.1繼續。 cURL客戶端將等待,直到它收到這兩個序列,如果它放棄,它將輸出(以詳細模式)消息「完成等待100-繼續」。 –
bishop
2016-06-02 17:59:23