408 Request Timeout

Klient zbyt długo wysyłał żądanie.

Kiedy go używać

Bezczynne połączenia. Klient może bezpiecznie ponowić żądanie.

Typowe przyczyny i rozwiązania

Serwer zamknął połączenie, bo klient nie wysłał na czas kompletnego żądania. Typowe przyczyny: wolne sieci komórkowe przy przesyłaniu dużych plików, połączenia otwierane z wyprzedzeniem przez przeglądarki, które potem nic nie wysyłają, oraz połączenia keep-alive bezczynne dłużej, niż pozwala serwer. W nginx odpowiadają za to timery client_header_timeout i client_body_timeout, oba domyślnie 60 sekund.

Przeglądarki po cichu ponawiają żądanie, gdy bezczynne połączenie keep-alive zostanie zamknięte, więc użytkownicy rzadko widzą 408; zauważysz go głównie w logach dostępu, gdzie wpisy bez linii żądania pochodzą z preconnectów i są nieszkodliwe. Przy przesyłaniu dużych plików przez wolne łącza zwiększ client_body_timeout albo przejdź na przesyłanie w częściach z możliwością wznowienia. Klient może bezpiecznie ponowić żądanie, bo serwer nigdy go nie przetworzył.

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 408 Request Timeout

Jak go wysłać

Node.js / Expressres.status(408).end()
Python / Flaskreturn '', 408
nginxreturn 408;

Jak go sprawdzić

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Otwórz narzędzie Kody statusu HTTP