Wymagany jest nagłówek Content-Length.
Kiedy go używać
Przesyłanie bez zadeklarowanego rozmiaru.
Typowe przyczyny i rozwiązania
Serwer odrzuca żądanie, które ma treść, ale nie ma nagłówka Content-Length. Dzieje się tak, gdy klient wysyła dane strumieniowo z Transfer-Encoding: chunked do serwera lub proxy, które odrzuca przesyłanie w trybie chunked, albo wysyła POST bez treści i w ogóle bez długości. Google Cloud Storage i niektóre starsze serwery słyną z tego, że wymagają Content-Length: 0 przy pustych żądaniach POST.
Napraw to po stronie klienta: zbuforuj treść, żeby biblioteka mogła ustawić długość, albo ustaw nagłówek samodzielnie. curl -d ustawia Content-Length automatycznie, ale curl -X POST bez danych nie wysyła go wcale, więc dodaj -H Content-Length:0. Ramki HTTP/2 i HTTP/3 oznaczają koniec treści, więc problem dotyczy tylko HTTP/1.1. nginx akceptuje treści żądań w trybie chunked od wersji 1.3.9.
Błąd klienta (4xx)
Kody 4xx to błędy klienta: samo żądanie jest błędne, nieautoryzowane albo wskazuje na coś, czego nie ma. Ponowienie tego samego żądania nic nie da.
Jak to wygląda
HTTP/1.1 411 Length RequiredJak go wysłać
| Node.js / Express | res.status(411).end() |
|---|---|
| Python / Flask | return '', 411 |
| nginx | return 411; |
Jak go sprawdzić
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/