Ответ 1
Значение 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
отсутствует или неправильно указан.