2012-04-15 197 views
10

如何可以計算內容長度例如:計算內容長度POST

POST /Upload/ HTTP/1.1 
Host: test.lan 
User-Agent: Shockwave Flash 
Connection: Keep-Alive 
Cache-Control: no-cache 
Accept: text/* 
Content-Length: ????? 
Content-Type: multipart/form-data; boundary=----------------------------4d2179e6b3c0 

------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filename" 

phpinfo.php 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="ASPSESSID" 

6e223eb1c7561e9c599f03cc04e9444b 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filedata"; filename="phpinfo.php" 
Content-Type: application/octet-stream 

<? phpinfo(); ?> 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Upload" 

Submit Query 
------------------------------4d2179e6b3c0-- 

回答

16

Content-Length值應通過合計所有數據後的消息頭的終止來計算。在您的例子中,這是這一切後點(與包括用於可讀性CRLF字符):

... 
Content-Length: ?????\r\n 
Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n 
\r\n 

一切的第一個空行(\r\n)之後未來 - 包括你的邊界分隔符 - 應算作在全長。實際上,這通常意味着在生成完整的消息實體主體之後,您需要列出Content-Length標頭值。一旦你有了完整的消息,你可以在頭文件中添加它來創建完整的HTTP消息。

根據HTTP規範,您在技術上不是要求來指定Content-Length標頭。從RFC 2616 14.13

應用程序應該使用此字段來指示消息體的傳輸長度,除非這是4.4節規則所禁止的。

然而,這是其通常會發回一個錯誤響應,如果Content-Length已丟失或錯誤地指定最服務器相當標準的要求。

+0

是的,按照HTTP,它不是強制要求,但是一些CGI實現要求所有POST事務中的內容長度。 – ViFI 2016-10-18 23:56:58