Existe uma maneira de evitar os erros necessários do nginx 411 Content-Length?

11

Estou recebendo um status 411 de volta do nginx ao tentar fazer um PUT sem especificar o comprimento do conteúdo. Existe alguma maneira de impedir que isso aconteça?


fonte

Respostas:

10

Você pode tentar adicionar isso à sua consulta:

curl -i -X ​​PUT -H 'Comprimento do conteúdo: 0' ' http://www.example.com/test '

Tente instalar o HttpChunkinModule ou atualize o Nginx para 1.3.9+

Este módulo não é mais necessário para o Nginx 1.3.9+ porque, desde 1.3.9, o núcleo do Nginx já possui suporte interno para os corpos de solicitação em pedaços.

Studer
fonte
5

As solicitações PUT exigem o comprimento do conteúdo. Não é o Nginx, é o HTTP que está fazendo esse requisito. Solicitações PUT, como solicitações POST, necessariamente têm um corpo de conteúdo. Esse corpo pode ter comprimento zero, mas, se for, é preciso dizer explicitamente. Obviamente, você não pode presumir que o conteúdo continue até que a conexão seja fechada (o que implica um cabeçalho de conteúdo ausente), porque o servidor precisa responder à solicitação antes que a conexão seja fechada.

tylerl
fonte
3
isso está incorreto. w3.org/Protocols/rfc2616/rfc2616-sec4.html "A presença de um corpo da mensagem em uma solicitação é sinalizada pela inclusão de um campo de cabeçalho Content-Length ou Transfer-Encoding nos cabeçalhos da mensagem da solicitação." Este é um erro no nginx que foi corrigido nas versões mais recentes. Observe que esse bug foi corrigido no POST muito antes de PUT.
Nick Palmer
2

Pergunta antiga, mas desde que me deparei com isso em uma pesquisa na web:

O NginX 1.3.9 e superior suporta "Transfer-Encoding: chunked" pronto para o POST e PUT.

Com a transferência em partes, você pode enviar arquivos sem definir primeiro o tamanho do conteúdo.

Deestan
fonte
Sim, isso foi corrigido, obrigado!
Rogerdpack 16/08/19