HTTP-заголовки для закодированного кодирования POST - Ошибка 411

Я отправляю данные на сервер с Arduino, который требует построения HTML POST по очереди. Я не обязательно знаю Content-Length a-priori, поэтому я использую кодировку "chunked".

Когда я попробовал этот пример из Википедии с "Transfer-Encoding" , как указано в rfc2616

client.println("POST /myurl HTTP/1.1");
client.println("Host: 12.345.679.999"); // replaced with the test server IP
client.println("User-Agent: Arduino/1.0");
client.println("Transfer-Encoding: chunked");
client.println();  
client.println("4");
client.println("test");
client.println("0");
client.println();

или, с явно выраженными символами escape:

client.print("4\r\ntest\r\n0\r\n\r\n");

Я получаю сообщение об ошибке с моего сервера:

HTTP/1.1 411 Length Required
A request of the requested method POST requires a valid Content-length.
Server: Apache/2.2.22 (Ubuntu)

Однако для кодирования "chunked" не требуется поле заголовка Content-Length, см. 4.4 - Длина сообщения в rfc2616

Мне не хватает поля? Почему этот вызов не работает?

Для записи работает не-Chunked-Encoding:

if(client.connect(server, 80)){
    String PostData = "test";
    Serial.println("POST /myurl HTTP/1.1");
    client.println("Host: 12.345.679.999"); // replaced with the test server IP
    Serial.println("User-Agent: Arduino/1.0");
    Serial.print("Content-Length: ");
    Serial.println(PostData.length());
    Serial.println();
    Serial.println(PostData);
}

UPDATE

Из apache2 error.log: "chunked Transfer-Encoding forbidden"

Ответы

Ответ 1

После нахождения

chunked Transfer-Encoding forbidden

в моем журнале Apache2 я пришел к выводу, что ошибка не была в POST, который я делал.

Я обнаружил, что modwsgi (средний слой между apache и django) не позволяет поменять кодировку передачи по умолчанию. В прошлом chunked не поддерживался вообще

Ссылаясь на журнал изменений в новой версии modwsgi, я обнаружил, что запись

WSGIChunkedRequest On

в моем файле apache httpd.conf разрешены chunked-запросы (не более 411 ошибок)