2012-04-15 179 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