É necessário um cabeçalho Content-Length.
Quando usar
Uploads sem tamanho declarado.
Causas comuns e soluções
O servidor recusa uma requisição que tem corpo, mas não tem o cabeçalho Content-Length. Isso acontece quando um cliente faz streaming com Transfer-Encoding: chunked para um servidor ou proxy que rejeita uploads chunked, ou envia um POST sem corpo e sem tamanho nenhum. O Google Cloud Storage e alguns servidores mais antigos são famosos por exigir Content-Length: 0 em requisições POST vazias.
Corrija no cliente: coloque o corpo em buffer para que a biblioteca possa definir o tamanho, ou defina o cabeçalho você mesmo. O curl -d define o Content-Length automaticamente, mas curl -X POST sem dados não envia nenhum, então adicione -H Content-Length:0. Os frames do HTTP/2 e do HTTP/3 marcam o fim do corpo, então o problema é específico do HTTP/1.1. O nginx aceita corpos de requisição chunked desde a versão 1.3.9.
Erro do cliente (4xx)
Os códigos 4xx são erros do cliente: a própria requisição está errada, não está autorizada ou aponta para algo que não existe. Repetir a mesma requisição não vai adiantar.
Como fica
HTTP/1.1 411 Length RequiredComo enviar
| Node.js / Express | res.status(411).end() |
|---|---|
| Python / Flask | return '', 411 |
| nginx | return 411; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/