计算内容长度POST

时间:2012-04-15 11:22:29

标签: http 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--

1 个答案:

答案 0 :(得分:19)

{/ 1}}值应通过在终止消息标头后总计所有数据来计算。对于您的示例,这是此后的所有内容(为了便于阅读,包含Content-Length个字符):

CRLF

第一个空行(... Content-Length: ?????\r\n Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n \r\n )之后的所有内容 - 包括您的边界分隔符 - 都应计入总长度。实际上,这通常意味着您需要在生成完整的消息实体主体后将\r\n标头值制成表格。获得完整的消息后,您可以将其与标头一起添加,以创建完整的HTTP消息。

根据HTTP规范,技术上 required 指定Content-Length标头。来自RFC 2616 14.13

  

应用程序应该使用此字段来指示消息正文的传输长度,除非4.4节中的规则禁止这样做。

但是,对于大多数服务器来说,这是一个非常标准的要求,如果Content-Length丢失或指定不正确,通常会发回错误响应。