Kody odpowiedzi HTTP

Są to informacje wysłane przez serwer do klienta (np. przeglądarki internetowej), które informują o sposobie / wyniku realizacji zapytania klienta.

Kody stanu odpowiedzi HTTP wskazują, czy określone żądanie HTTP zostało pomyślnie zakończone lub nie (wskazując potencjalną przyczynę). 

Większość przeglądarek intrentowyich jak: Google Chrome, Mozilla FireFox, Safari czy Microsoft Edge ma wbudowane narzędzia, takiej jak dev tools które dają użytkownikowi możliwości obejrzenia min. nagłówków oraz  kodów odpowiedzi HTTP.

Odpowiedzi HTTP są pogrupowane w pięć klas:

1xx – kody informacyjne / Informational responses (100–199)

2xx – kody powodzenia / Successful responses (200–299)

3xx – kody przekierowania / Redirects (300–399)

4xx – kody błędu aplikacji klienta / Client errors (400–499)

5xx – kody błędu serwera / Server errors (500–599)

Są to cenne informacje dla użytkowników jak i twórców strony www i aplikacji webowych. Dzięki którym szybciej można zdiagnozować przyczynę błędu, a następnie ją usunąć. 

Poniżej przedstawiamy najczęstsze kody odpowiedzi HTTP

Kody informacyjne / Informational responses (100–199):

100 Continue – Kontynuuj, prośba o dalsze wysyłanie zapytana.

101 Switching Protocols – Zmiana protokołu 

102 Processing – Kod wskazuje, że serwer otrzymał i przetwarza żądanie, ale odpowiedź nie jest jeszcze dostępna.

103 Early Hints – Kod stanu jest przeznaczony przede wszystkim do użycia z nagłówkiem Link, pozwalając agentowi użytkownika rozpocząć wstępne ładowanie zasobów, podczas gdy serwer przygotowuje odpowiedź.

110 Connection Timed Out – Przekroczono maksymalny czas połączenia. Serwer zbyt długo nie odpowiada.

111 Connection Refused – Połączenie odrzucone przez serwer.

Kody powodzenia / Successful responses (200–299):

200 OK – Żądanie się powiodło, serwer zwrócił oczekiwaną odpowiedź. Znaczenie sukcesu zależy od metody HTTP:

  • GET – Pobierz. Zasób został pobrany i jest przesyłany w treści wiadomości.
  • HEAD –  Nagłówki encji znajdują się w treści wiadomości.
  • PUT or POST – Zasób opisujący wynik działania jest przesyłany w treści wiadomości.
  • TRACE – Śledzenie. Treść wiadomości zawiera komunikat żądania otrzymany przez serwer.

201 Created – Utworzono – Żądanie powiodło się, w wyniku czego utworzono nowy zasób. Zazwyczaj jest to odpowiedź wysyłana po żądaniach POST lub niektórych żądaniach PUT.

202 Accepted – Zaakceptowano. Żądanie zostało otrzymane, ale nie zostało jeszcze zrealizowane. Jest to niezobowiązujące, ponieważ w HTTP nie ma możliwości wysłania asynchronicznej odpowiedzi wskazującej wynik żądania. Jest przeznaczony do przypadków, gdy inny proces lub serwer obsługuje żądanie lub do przetwarzania wsadowego.

203 Non Authoritative Information – Informacja nieautorytatywna.  Zwrócona informacja nie odpowiada dokładnie odpowiedzi pierwotnego serwera, lecz została utworzona z lokalnych bądź zewnętrznych kopii.

204 No Content – Brak zawartości. Serwer zrealizował zapytanie klienta i nie potrzebuje zwracać żadnej treści.

205 Reset Content – Przywróć zawartość. Serwer zrealizował zapytanie i klient powinien przywrócić pierwotny wygląd dokumentu.

206 Partial Content – Część zawartości – serwer zrealizował tylko część zapytania typu GET, odpowiedź musi zawierać nagłówek Content-Range informujący o zakresie bajtowym zwróconego elementu.

207 Multi-Status – Przekazuje informacje o wielu zasobach w sytuacjach, w których może być odpowiednie wiele kodów stanu.

208 Already Reported – Używany wewnątrz elementu odpowiedzi <dav: propstat>, aby uniknąć wielokrotnego wyliczania wewnętrznych elementów wielu powiązań z tą samą kolekcją.

226 IM Used – Serwer spełnił żądanie GET dla zasobu, a odpowiedź jest reprezentacją wyniku jednej lub więcej manipulacji instancją zastosowanych do bieżącej instancji.

Kody przekierowania / Redirects (300–399):

300 Multiple Choice – Wiele możliwości, istnieje więcej niż jeden sposób obsłużenia danego zapytania, serwer może podać adres zasobu, który pozwala na wybór jednoznacznego zapytania spośród możliwych.

301 Moved Permanently -Trwale przeniesiony – żądany zasób zmienił swój URI, w przyszłości zasób powinien być szukany pod wskazanym nowym adresem.

302 Found – Znaleziono – żądany zasób jest chwilowo dostępny pod innym adresem a przyszłe odwołania do zasobu powinny być kierowane pod adres pierwotny.

303 See Other – Zobacz inne – odpowiedź na żądanie znajduje się pod innym URI i tam klient powinien się skierować. To jest właściwy sposób przekierowywania w odpowiedzi na żądanie metodą POST.

304 Not Modified – Nie zmieniono – zawartość zasobu nie podległa zmianie według warunku przekazanego przez klienta (np. data ostatniej wersji zasobu pobranej przez klienta – cache przeglądarki)

305 Use Proxy – Użyj serwera proxy – do żądanego zasobu trzeba odwołać się przez serwer proxy podany w nagłówku Location odpowiedzi

306 Switch Proxy – Kod nieużywany, aczkolwiek zastrzeżony dla starszych wersji protokołu.

307 Temporary Redirect – Tymczasowe przekierowanie – żądany zasób znajduje się chwilowo pod innym adresem URI, odpowiedź powinna zawierać zmieniony adres zasobu, na który klient zobowiązany jest się przenieść.

308 Permanent Redirect – Trwałe przekierowanie. Oznacza to, że zasób jest teraz na stałe zlokalizowany w innym URI, określonym przez nagłówek Location: HTTP Response. Ma to tę samą semantykę, co kod odpowiedzi 301 Permanently Moved HTTP, z tym wyjątkiem, że agent użytkownika nie może zmienić użytej metody HTTP: Jeśli POST został użyty w pierwszym żądaniu, POST musi zostać użyty w drugim żądaniu.

310 Too many redirects – Zbyt wiele przekierowań.

Kody błędu aplikacji klienta / Client errors (400–499):

400 Bad Request – nieprawidłowe zapytanie – żądanie nie może być obsłużone przez serwer z powodu nieprawidłowej składni zapytania.

401 Unauthorized – nieautoryzowany dostęp – żądanie zasobu, który wymaga uwierzytelnienia.

402 Payment Required – Wymagana opłata – odpowiedź zarezerwowana na przyszłość. np. Google Developers API korzysta z tego kodu, jeśli dany programista przekroczył dzienny limit zapytań.

403 Forbidden – Zabroniony – serwer zrozumiał zapytanie, lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób.

404 Not Found – Nie znaleziono – serwer nie odnalazł zasobu według podanego URL ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości.

405 Method Not Allowed – Niedozwolona metoda – metoda zawarta w żądaniu nie jest dozwolona dla wskazanego zasobu, odpowiedź zawiera też listę dozwolonych metod.

406 Not Acceptable – Niedozwolone – zażądany zasób nie jest w stanie zwrócić odpowiedzi mogącej być obsłużonej przez klienta według informacji podanych w zapytaniu.

407 Proxy Authentication Required – Wymagane uwierzytelnienie do serwera pośredniczącego (ang. proxy) – analogicznie do kodu 401, dotyczy dostępu do serwera proxy. 

408 Request Timeout – Koniec czasu oczekiwania na żądanie – klient nie przesłał zapytania do serwera w określonym czasie.

409 Conflict – Konflikt – żądanie nie może być zrealizowane, ponieważ występuje konflikt z obecnym statusem zasobu, ten kod odpowiedzi jest zwracany tylko w przypadku podejrzewania przez serwer, że klient może znaleźć przyczyny błędu i przesłać ponownie prawidłowe zapytanie. Odpowiedź serwera powinna zawierać informację umożliwiające klientowi rozwiązanie problemu, jednak nie jest to obowiązkowe (np. przesłanie 2 razy identycznego dokumentu kiedy wymagana jest unikalność).

410 Gone – Zniknął (usunięto) – zażądany zasób nie jest dłużej dostępny i nieznany jest jego ewentualny nowy adres URI; klient powinien już więcej nie odwoływać się do tego zasobu.

411 Length Required – Wymagana długość – serwer odmawia zrealizowania zapytania ze względu na brak nagłówka Content-Length w zapytaniu; klient może powtórzyć zapytanie dodając doń poprawny nagłówek długości.

412 Precondition Failed – Warunek wstępny nie może być spełniony – serwer nie może spełnić przynajmniej jednego z warunków zawartych w zapytaniu.

413 Payload Too Large – Jednostka żądania jest większa niż limity określone przez serwer. Serwer może zamknąć połączenie lub zwrócić pole nagłówka Retry-After.

414 URI Too Long – Żądany przez klienta identyfikator URI jest dłuższy niż maksymalny oczekiwana przez serwer.

415 Unsupported Media Type – Format multimediów żądanych danych nie jest obsługiwany przez serwer, więc serwer odrzuca żądanie.

416 Range Not Satisfiable – Zakres określony w polu nagłówka Range w żądaniu nie może być spełniony. Możliwe, że zakres jest poza zakresem danych docelowego identyfikatora URI.

417 Expectation Failed – Ten kod odpowiedzi oznacza, że ​​serwer nie może spełnić oczekiwań wskazanych w polu nagłówka Expect.

421 Misdirected Request – Żądanie zostało skierowane do serwera, który nie jest w stanie wygenerować odpowiedzi. Może to zostać wysłane przez serwer, który nie jest skonfigurowany do generowania odpowiedzi dla kombinacji schematu i uprawnień zawartych w identyfikatorze URI żądania.

422 Unprocessable Entity – Żądanie było poprawnie sformułowane, ale nie można było go wykonać z powodu błędów semantycznych.

423 Locked – Dostęp do zasobu jest zablokowany.

424 Failed Dependency – Żądanie nie powiodło się z powodu niepowodzenia poprzedniego żądania.

425 Too Early – Wskazuje, że serwer nie chce ryzykować przetwarzania żądania, które może zostać odtworzone.

426 Upgrade Required – Serwer odmawia wykonania żądania przy użyciu bieżącego protokołu, ale może to zrobić po aktualizacji klienta do innego protokołu. Serwer wysyła nagłówek aktualizacji w odpowiedzi 426 w celu wskazania wymaganych protokołów.

428 Precondition Required – Serwer pochodzenia wymaga, aby żądanie było warunkowe.

429 Too Many Requests – Użytkownik wysłał zbyt wiele żądań w danym czasie. 

431 Request Header Fields Too Large – Serwer nie chce przetworzyć żądania, ponieważ pola nagłówka są zbyt duże. Żądanie może zostać ponownie przesłane po zmniejszeniu rozmiaru pól nagłówka żądania.

451 Unavailable For Legal Reasons – Agent użytkownika zażądał zasobu, którego nie można legalnie udostępnić, takiego jak strona internetowa ocenzurowana przez rząd.

Kody błędu serwera / Server errors (500–599):

500 Internal Server Error – Wewnętrzny błąd serwera – serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania.

501 Not Implemented – Nie zaimplementowano – serwer nie dysponuje funkcjonalnością wymaganą w zapytaniu; ten kod jest zwracany, gdy serwer otrzymał nieznany typ zapytania.

502 Bad Gateway – Błąd bramy – serwer – spełniający rolę bramy lub pośrednika – otrzymał niepoprawną odpowiedź od serwera nadrzędnego i nie jest w stanie zrealizować żądania klienta.

503 Service Unavailable – Usługa niedostępna – serwer nie jest w stanie w danej chwili zrealizować zapytania klienta ze względu na przeciążenie.

504 Gateway Timeout – Przekroczony czas  – serwer – spełniający rolę bramy lub pośrednika – nie otrzymał w ustalonym czasie odpowiedzi od wskazanego serwera HTTP, FTP, LDAP itp. lub serwer DNS jest potrzebny do obsłużenia zapytania

505 HTTP Version Not Supported – wersja HTTP nie obsługiwana – serwer nie obsługuje bądź odmawia obsługi wskazanej przez klienta wersji HTTP.

506 Variant Also Negotiates – Serwer ma wewnętrzny błąd konfiguracji: wybrany wariant zasobu jest skonfigurowany tak, aby sam uczestniczył w przejrzystych negocjacjach treści, a zatem nie jest właściwym punktem końcowym w procesie negocjacji.

507 Insufficient Storage – Serwer nie jest w stanie zapisać danych związanych z wykonaniem zapytania.

508 Loop Detected – Serwer wykrył nieskończoną pętlę w trakcie przetwarzania zapytania.

509 Bandwidth Limit Exceeded – Serwer jest tymczasowo niedostępny, ponieważ właściciel strony przekroczył limit transferu danych.

510 Not Extended – Brak rozszerzenia HTTP koniecznego do obsługi danego zapytania.

511 Network Authentication Required – Wymagane uwierzytelnienie przed otrzymaniem dostępu do sieci.

Jak już wcześniej pisaliśmy kody odpowiedzi są pomocne przy szukaniu błędów, gdy aplikacja, strona www nie działa poprawnie i serwer jest ustawiony tak że pokazuje odpowiedzi. Wtedy powyższa lista podpowie co może być przyczyną błędu. Znajomość kodów odpowiedzi HTTP jest praktyczna i pomocna. Nie trzeba ich znać na pamięć, ale warto mieć do nich link pod ręką.

Pomocne źródła (tu znajdziesz więcej informacji):
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status