15

如何计算内容长度,例如:

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--
4

1 回答 1

18

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但是,对于大多数服务器来说,这是一个非常标准的要求,如果缺少或指定不正确,通常会发回错误响应。

于 2012-08-25T05:25:39.397 回答