Вопрос по http, post – Рассчитать длину содержимого POST

13

Как я могу рассчитать длину контента, например:

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   ответ
18

Content-Length значение должно быть рассчитано путем суммирования всех данныхafter прекращение заголовков сообщений. В случае вашего примера, это все после этой точки (сCRLF символы включены для удобства чтения):

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

Все идет после первой пустой строки (\r\n) - включая ваши ограничители границ - должны учитываться в общей длине. На практике это обычно означает, что вам нужноContent-Length значение заголовка после генерации полного тела объекта сообщения. Когда у вас есть полное тело сообщения, вы можете добавить его к заголовкам, чтобы создать полное HTTP-сообщение.

В соответствии со спецификацией HTTP вы не техническиrequired указатьContent-Length заголовок. ОтRFC 2616 14,13:

Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4.

Тем не менее, это довольно стандартное требование для большинства серверов, которые обычно отправляют ответ об ошибке, еслиContent-Length отсутствует или неправильно указан.

Error: User Rate Limit Exceeded

Похожие вопросы