计算内容长度POST

Som*_*234 15 post http

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

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--
Run Code Online (Sandbox Code Playgroud)

rdl*_*rey 19

Content-Length应通过在消息头终止合计所有数据来计算该值.在您的示例中,这是此后的所有内容(包含CRLF字符以便于阅读):

...
Content-Length: ?????\r\n
Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)

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

根据HTTP规范,技术上不需要指定Content-Length标头.来自RFC 2616 14.13:

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

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