Onda POST - 411 Comprimento Necessário

29

Temos uma API RestFUL que construímos em PHP. Se fizermos o pedido:

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

Voltamos:

411 - Length Required

Porém, se simplesmente adicionarmos -d ""à solicitação, ela funcionará e nenhum erro 411. Existe uma maneira de não exigir a adição de -d ao comando curl?

Estamos usando o servidor web lighttpd e acreditamos que o seu lighttpd NÃO php está retornando o erro 411.

Justin
fonte

Respostas:

47

Você está correto - o lighttpd não suporta solicitações POST com um corpo de mensagem vazio sem um cabeçalho 'Content-Length' definido como zero, e o CURL envia essa solicitação. Há discussões e discussões sobre quem está certo, mas, na minha opinião, o lighttpd está quebrado. Um POST sem comprimento de conteúdo e sem codificação de transferência é perfeitamente legal e não possui corpo de mensagem.

A adição -d ""faz com que o CURL envie um Content-Length: 0cabeçalho, o que resolve o problema.

Você pode modificar o lighttp. Encontre o código que emite o erro 411 e defina o comprimento do conteúdo como zero.

David Schwartz
fonte
Obrigado pela ótima explicação, então não há sinalizador para passar para curl -d ""ou uma diretiva de configuração lighttpd para definir? -d ""apenas parece um hack.
Justin
1
É um truque. Se você quiser resolver o problema de verdade, precisará modificar o lighttpd. Você pode usá- -d @/dev/nulllo se achar melhor. Você também pode usar -H "Content-Length: 0". (Eu testei ambos, eles funcionam.)
David Schwartz
Ok obrigado. -d ""parece ser a melhor opção.
Justin