Kody odpowiedzi HTTP – kompendium
Każda odpowiedź HTTP zaczyna się od trzycyfrowego kodu odpowiedzi (nazywanego też kodem statusu), który informuje klienta, co się stało. Przeglądaj kody według klas, od 1xx po kody błędów HTTP 4xx i 5xx, z przystępnymi objaśnieniami, przykładowymi odpowiedziami i opisem tego, co każdy z nich oznacza dla przekierowań i SEO.
1xx Informacja
Żądanie zostało odebrane, a jego przetwarzanie trwa. Te odpowiedzi pośrednie docierają przed odpowiedzią końcową i nigdy nie kończą łańcucha przekierowań.
- 100
Continue
Odpowiedź pośrednia: serwer zaakceptował nagłówki żądania, a klient, który wysłał „Expect: 100-continue”, powinien teraz wysłać treść żądania. - 101
Switching Protocols
Serwer przyjmuje żądanie Upgrade klienta i przełącza to połączenie na inny protokół – w praktyce niemal zawsze na WebSocket. - 102
Processing
Przestarzała odpowiedź pośrednia WebDAV informująca klienta, że serwer wciąż przetwarza długie żądanie i trzeba nadal czekać. - 103
Early Hints
Odpowiedź pośrednia z nagłówkami Link, dzięki której przeglądarka wczytuje zasoby lub otwiera połączenia, zanim serwer przygotuje odpowiedź końcową.
2xx Sukces
Żądanie zostało odebrane, zrozumiane i przyjęte. Prawidłowy łańcuch przekierowań kończy się jednym z tych kodów, zwykle 200 OK.
- 200
OK
Żądanie zakończyło się powodzeniem; przy GET treść zawiera żądany zasób. Każdy łańcuch przekierowań powinien kończyć się adresem URL zwracającym 200. - 201
Created
Żądanie zakończyło się powodzeniem i utworzyło nowy zasób, zwykle po POST lub PUT. Nagłówek Location, jeśli występuje, wskazuje nowy zasób. - 202
Accepted
Żądanie zostało przyjęte do przetwarzania, ale jeszcze się nie zakończyło. Kod dla zadań asynchronicznych; ostateczny wynik nie jest gwarantowany. - 203
Non-Authoritative Information
Żądanie zakończyło się powodzeniem, ale proxy transformujące zmodyfikowało odpowiedź, więc treść różni się od tej wysłanej przez serwer źródłowy. - 204
No Content
Żądanie zakończyło się powodzeniem i nie ma treści do wysłania. Przeglądarka zostaje na bieżącej stronie; typowe dla DELETE, beaconów i preflight CORS. - 205
Reset Content
Żądanie zakończyło się powodzeniem, a klient powinien zresetować widok dokumentu, np. wyczyścić właśnie wysłany formularz. - 206
Partial Content
Serwer wysyła tylko te zakresy bajtów, o które klient poprosił nagłówkiem Range – tak działa streaming wideo i wznawianie pobierania. - 207
Multi-Status
Odpowiedź WebDAV, która w treści XML typu multistatus zawiera osobny kod odpowiedzi dla każdego z kilku zasobów lub właściwości. - 208
Already Reported
Używany w odpowiedzi WebDAV 207: elementy tej kolekcji wymieniono już wcześniej, co zapobiega niekończącym się powtórzeniom przy zapętlonych powiązaniach. - 226
IM Used
Serwer odpowiedział na GET z użyciem kodowania delta (RFC 3229): treść zawiera tylko zmiany względem wersji, którą klient już ma.
3xx Przekierowanie
Klient musi podjąć dalsze działanie, zwykle wysłać żądanie pod adres URL z nagłówka Location. To właśnie z tych kodów składa się łańcuch przekierowań.
- 300
Multiple Choices
Zasób ma kilka reprezentacji, a klient może wybrać jedną z nich. Przeglądarki nie podążają automatycznie za kodem 300, nawet z nagłówkiem Location. - 301
Moved Permanently
Zasób ma nowy, stały adres URL podany w nagłówku Location. Klienci i wyszukiwarki powinni od teraz używać nowego adresu. - 302
Found
Zasób tymczasowo znajduje się pod innym adresem URL. Klienci podążają za nagłówkiem Location, ale w przyszłości powinni używać pierwotnego adresu. - 303
See Other
Przekierowuje klienta na inny adres URL, który trzeba pobrać metodą GET – zwykle by po wysłaniu formularza pokazać stronę z wynikiem (Post/Redirect/Get). - 304
Not Modified
Odpowiedź na warunkowe GET lub HEAD: kopia w pamięci podręcznej klienta jest wciąż aktualna, więc serwer nie wysyła treści, a klient używa tej kopii. - 305
Use Proxy
Wycofany. Nakazywał klientowi powtórzyć żądanie przez serwer proxy podany w nagłówku Location; przeglądarki ignorują go ze względów bezpieczeństwa. - 306
Nieużywany (dawniej Switch Proxy)
Kod zarezerwowany i nieużywany. Dawniej proponowany jako „Switch Proxy”, ale porzucony; nie wolno go używać, a klienci traktują go jak nieznany kod 3xx. - 307
Temporary Redirect
Przekierowanie tymczasowe: żądanie trzeba powtórzyć pod adresem z Location tą samą metodą i treścią, w odróżnieniu od 302, które może zmienić POST w GET. - 308
Permanent Redirect
Przekierowanie stałe, które zachowuje metodę i treść żądania. Jak przy 301 należy od teraz używać nowego adresu URL, ale POST nigdy nie zmienia się w GET.
4xx Błąd klienta
Żądania w tej postaci nie da się zrealizować: strona nie istnieje, dostęp jest zabroniony albo klient wysłał zbyt wiele żądań.
- 400
Bad Request
Serwer nie przetworzy żądania z powodu błędu klienta, takiego jak nieprawidłowa składnia, błędny adres URL lub zbyt duże pliki cookie. - 401
Unauthorized
Żądanie wymaga poprawnego uwierzytelnienia. Serwer musi wysłać nagłówek WWW-Authenticate, który określa sposób uwierzytelnienia, np. Basic lub Bearer. - 402
Payment Required
Zarezerwowany w HTTP do przyszłego użytku. W praktyce niektóre API i usługi stosują go, gdy potrzebna jest płatność, doładowanie kredytów lub subskrypcja. - 403
Forbidden
Serwer zrozumiał żądanie, ale odmawia jego autoryzacji. W odróżnieniu od 401 ponowne wysłanie tych samych danych logowania nic nie da. - 404
Not Found
Serwer nie ma niczego pod tym adresem URL albo nie chce ujawnić, czy coś tam jest. Kod nie mówi, czy brak jest tymczasowy, czy trwały. - 405
Method Not Allowed
Adres URL istnieje, ale nie obsługuje użytej metody HTTP, np. POST wysłanego na statyczną stronę. Nagłówek Allow wymienia obsługiwane metody. - 406
Not Acceptable
Serwer nie może wygenerować odpowiedzi zgodnej z nagłówkami Accept klienta (format, język, kodowanie) i nie wyśle wersji domyślnej. - 407
Proxy Authentication Required
Podobnie jak przy 401, ale uwierzytelnienia wymaga serwer proxy między klientem a serwerem. Nagłówek Proxy-Authenticate określa sposób uwierzytelnienia. - 408
Request Timeout
Serwer nie otrzymał na czas kompletnego żądania i zamyka połączenie. Klient może wysłać żądanie ponownie w nowym połączeniu. - 409
Conflict
Żądanie jest sprzeczne z bieżącym stanem zasobu, np. przy konflikcie edycji, zduplikowanym rekordzie lub niezgodności wersji. - 410
Gone
Zasób został celowo usunięty i nie należy spodziewać się jego powrotu. To wyraźniejszy sygnał trwałego usunięcia niż kod 404 Not Found. - 411
Length Required
Serwer odrzuca żądanie z treścią, ale bez nagłówka Content-Length. Klient może je wysłać ponownie z prawidłowym Content-Length. - 412
Precondition Failed
Warunek w nagłówkach żądania, np. If-Match lub If-Unmodified-Since, okazał się fałszywy, więc serwer nie wprowadził zmiany. - 413
Content Too Large
Treść żądania jest większa, niż serwer akceptuje, np. przy zbyt dużych plikach. Dawniej „Payload Too Large” i „Request Entity Too Large”. - 414
URI Too Long
Żądany adres URL jest dłuższy, niż serwer chce przetworzyć, np. dlatego, że pętla przekierowań wciąż dopisuje do niego parametry. - 415
Unsupported Media Type
Serwer odrzuca treść żądania, bo jej format (Content-Type) lub sposób kodowania (Content-Encoding) nie jest obsługiwany. - 416
Range Not Satisfiable
Zakres bajtów z nagłówka Range wykracza poza plik, np. gdy pobieranie zostaje wznowione za końcem pliku, który się zmienił. - 417
Expectation Failed
Serwer nie może spełnić oczekiwania z nagłówka Expect żądania. W praktyce oznacza to, że Expect: 100-continue nie jest obsługiwane. - 418
I'm a Teapot
Primaaprilisowy żart z protokołu sterowania dzbankiem do kawy (RFC 2324, 1998). W HTTP zarezerwowany i nieużywany, ale niektóre witryny celowo go zwracają. - 421
Misdirected Request
Żądanie trafiło do serwera, który nie może odpowiadać za tę nazwę hosta – często z powodu niezgodności TLS SNI lub ponownie użytego połączenia HTTP/2. - 422
Unprocessable Content
Żądanie ma poprawną formę, ale jego treść jest semantycznie nieprawidłowa – zwykle to błąd walidacji w API. Dawniej „Unprocessable Entity”. - 423
Locked
WebDAV: zasób jest zablokowany, więc nie można teraz wykonać metody. Klient potrzebuje tokenu blokady albo musi poczekać na jej zwolnienie. - 424
Failed Dependency
WebDAV: metody nie można było wykonać, bo nie powiodła się inna operacja, od której zależała, np. zmiana jednej właściwości w PROPPATCH. - 425
Too Early
Serwer nie przetworzy żądania wysłanego jako wczesne dane TLS (0-RTT), bo mogłoby ono zostać powtórzone. Klient ponawia je po uzgodnieniu połączenia. - 426
Upgrade Required
Serwer odmawia obsługi żądania w bieżącym protokole i wymaga, aby klient przeszedł na protokół wskazany w nagłówku Upgrade. - 428
Precondition Required
Serwer wymaga, aby żądanie było warunkowe (If-Match), co zapobiega utracie aktualizacji, gdy kilku klientów edytuje ten sam zasób. - 429
Too Many Requests
Klient wysłał zbyt wiele żądań w określonym czasie (limit żądań). Nagłówek Retry-After może podawać, ile trzeba odczekać przed kolejną próbą. - 431
Request Header Fields Too Large
Serwer odrzuca żądanie, bo jego nagłówki są zbyt duże – zwykle dlatego, że przeglądarka wysyła zbyt wiele lub zbyt duże pliki cookie. - 444
No Response
nginx Niestandardowy kod nginx: serwer zamyka połączenie bez wysyłania jakiejkolwiek odpowiedzi. Klient widzi pustą odpowiedź, a nigdy kod 444. - 451
Unavailable For Legal Reasons
Dostęp zablokowano z powodu wymogu prawnego, np. nakazu sądowego lub blokady rządowej. Nazwa nawiązuje do powieści „451° Fahrenheita” Raya Bradbury’ego. - 499
Client Closed Request
nginx Niestandardowy kod, który nginx zapisuje w logu dostępu (access log), gdy klient zamknął połączenie, zanim serwer zdążył wysłać odpowiedź.
5xx Błąd serwera
Serwer nie zdołał obsłużyć pozornie poprawnego żądania. Utrzymujące się błędy 5xx blokują zarówno odwiedzających, jak i roboty indeksujące.
- 500
Internal Server Error
Ogólny błąd po stronie serwera: coś poszło nie tak, np. aplikacja uległa awarii albo plik konfiguracyjny jest uszkodzony. - 501
Not Implemented
Serwer nie obsługuje funkcji potrzebnej do realizacji żądania – zwykle chodzi o metodę HTTP, której w ogóle nie rozpoznaje. - 502
Bad Gateway
Brama lub serwer proxy otrzymały nieprawidłową odpowiedź od serwera nadrzędnego, np. dlatego, że aplikacja za nginx uległa awarii. - 503
Service Unavailable
Serwer chwilowo nie może obsłużyć żądania z powodu przeciążenia lub prac serwisowych. Nagłówek Retry-After może podać, kiedy spróbować ponownie. - 504
Gateway Timeout
Brama lub serwer proxy nie otrzymały na czas odpowiedzi od serwera nadrzędnego – zwykle dlatego, że aplikacja działa zbyt wolno. - 505
HTTP Version Not Supported
Serwer nie obsługuje lub odmawia obsługi głównej wersji HTTP użytej w żądaniu. Dziś często wskazuje to na błędnie sformatowany wiersz żądania. - 506
Variant Also Negotiates
Błąd konfiguracji serwera w przezroczystej negocjacji treści (RFC 2295): wybrany wariant sam podlega negocjacji, co tworzy pętlę. - 507
Insufficient Storage
WebDAV: serwer nie może zapisać danych potrzebnych do realizacji żądania, np. dlatego, że dysk lub limit miejsca użytkownika są zapełnione. - 508
Loop Detected
WebDAV: serwer przerwał operację z Depth: infinity, bo wykrył nieskończoną pętlę powiązań. Nie ma to związku z pętlami przekierowań. - 510
Not Extended
Z przestarzałego HTTP Extension Framework (RFC 2774): w żądaniu brakuje deklaracji wymaganego rozszerzenia. Kod historyczny, praktycznie nieużywany. - 511
Network Authentication Required
Sieć – zwykle Wi-Fi z portalem logowania – wymaga zalogowania, zanim udzieli dostępu. Kod wysyłają sieci przechwytujące ruch, a nie serwery źródłowe. - 520
Web Server Returned an Unknown Error
Cloudflare Kod specyficzny dla Cloudflare: serwer źródłowy zwrócił pustą, nieznaną lub nieoczekiwaną odpowiedź, np. po awarii lub zresetowaniu połączenia. - 521
Web Server Is Down
Cloudflare Kod specyficzny dla Cloudflare: serwer źródłowy odrzucił połączenie od Cloudflare, zwykle dlatego, że serwer WWW nie działa lub blokuje Cloudflare. - 522
Connection Timed Out
Cloudflare Kod specyficzny dla Cloudflare: Cloudflare nie zdołał na czas nawiązać połączenia TCP z serwerem źródłowym albo serwer nie potwierdził żądania. - 523
Origin Is Unreachable
Cloudflare Kod specyficzny dla Cloudflare: Cloudflare w ogóle nie może dotrzeć do serwera źródłowego, zwykle z powodu problemu z routingiem lub błędnego IP w DNS. - 524
A Timeout Occurred
Cloudflare Kod specyficzny dla Cloudflare: Cloudflare połączył się z serwerem źródłowym, ale ten nie odpowiedział przed upływem limitu czasu (domyślnie ok. 2 min). - 525
SSL Handshake Failed
Cloudflare Kod specyficzny dla Cloudflare: nie powiodło się uzgadnianie TLS między Cloudflare a serwerem źródłowym, np. z powodu braku ważnego certyfikatu. - 526
Invalid SSL Certificate
Cloudflare Kod specyficzny dla Cloudflare: w trybie Full (strict) Cloudflare nie zweryfikował certyfikatu serwera, np. wygasłego, samopodpisanego lub dla innej nazwy. - 530
Błąd Cloudflare 1xxx
Cloudflare Kod specyficzny dla Cloudflare: wysyłany razem z błędem Cloudflare 1xxx, np. 1016 (Origin DNS error) lub 1033 (Cloudflare Tunnel error).
Jak czytać kod odpowiedzi HTTP
Pierwsza cyfra określa klasę odpowiedzi, a dwie pozostałe – jej dokładne znaczenie w obrębie tej klasy. Klient, który nie rozpoznaje konkretnego kodu, traktuje go jak kod x00 z tej samej klasy, więc nieznany kod 4xx zostanie obsłużony jak 400 Bad Request.
Opis słowny po liczbie (tzw. reason phrase), np. Not Found czy Moved Permanently, jest przeznaczony wyłącznie dla ludzi. Klienci kierują się tylko liczbą, a HTTP/2 i HTTP/3 w ogóle nie przesyłają tego opisu.
Kody przekierowań w skrócie
- 301 Moved Permanently: stałe; przeglądarki mogą zmienić POST na GET. Standardowy wybór przy przenoszeniu stron.
- 302 Found: tymczasowe; metoda może się zmienić. Domyślne w wielu frameworkach.
- 303 See Other: tymczasowe; klient zawsze przechodzi pod nowy adres metodą GET. Stosowane po wysłaniu formularza.
- 307 Temporary Redirect: tymczasowe; metoda i treść żądania pozostają bez zmian.
- 308 Permanent Redirect: stałe; metoda i treść żądania pozostają bez zmian.
- 304 Not Modified: nie przekierowuje na inny adres URL, tylko sygnalizuje, że kopia w pamięci podręcznej klienta jest nadal aktualna.
Kiedy stosować który kod, wyjaśniamy w przewodniku po kodach przekierowań HTTP.
Kody odpowiedzi w łańcuchu przekierowań
Łańcuch przekierowań to seria odpowiedzi 3xx zakończona odpowiedzią końcową. Odwiedzający lub robot indeksujący faktycznie otrzymuje tylko ostatni kod odpowiedzi, więc łańcuch, który kończy się kodem 404, to niedziałający link, nawet jeśli wcześniejsze przekierowania wyglądają bez zarzutu. Skorzystaj z narzędzia do sprawdzania przekierowań URL, aby zobaczyć kod odpowiedzi każdego przeskoku, albo z masowego sprawdzania przekierowań, aby sprawdzić wiele adresów URL naraz.
Sprawdzanie przekierowań URL
Zobacz wszystkie kody odpowiedzi, jakie zwraca adres URL, przeskok po przeskoku, w darmowym narzędziu TrueURL do sprawdzania przekierowań.