TL;DR
Czym są kody odpowiedzi HTTP?
Protokół HTTP, który w dużej mierze odpowiada za działanie internetu, opiera się na komunikacji pomiędzy różnymi stronami, serwerami, użytkownikami czy aplikacjami z wykorzystaniem ściśle określonego formatu zapytań i odpowiedzi. Aby ułatwić odczytywanie informacji przez oprogramowanie, stosuje się trzycyfrowe oznaczenia z informacją o wyniku zapytania – to właśnie kody odpowiedzi HTTP. W teorii serwer może zdefiniować dowolne kody, jednak najczęściej stosuje się standardowy zestaw podzielony na pięć kategorii:
odpowiedzi informacyjne (HTTP 100–199)– potwierdzają otrzymanie zapytania i kontynuację przetwarzania;
kody powodzenia (HTTP 200–299)– pomyślne przyjęcie zapytania, przeważnie wraz z odpowiedzią w postaci żądanego pliku lub innego zasobu;
przekierowania (HTTP 300–399)– wykorzystywane wtedy, gdy zasoby znajdują się w innym miejscu niż adres z zapytania;
błędy klienta (HTTP 400–499)– obejmują problemy z zapytaniem (np. z jego składnią), które uniemożliwiają realizację;
błędy serwera (HTTP 500-599)– informują o problemach po stronie serwera mimo poprawnie wprowadzonego zapytania.
Choć liczba kodów możliwych do wykorzystania jest dość duża, oficjalny rejestr obejmuje tylko kilkadziesiąt zdefiniowanych odpowiedzi. Większość z nich jest używana dość rzadko – administratorzy stron zwykle skupiają się na kilku lub kilkunastu kodach przeznaczonych dla typowych sytuacji i najczęstszych błędów.
Informacyjne kody HTTP (1xx)
W tym przypadku przygotowanie odpowiedniej odpowiedzi dla użytkowników nie wymaga dodatkowej pracy na stronie. To kody stosowane jedynie do kontynuacji zapytań – niemal zawsze za wszelkie kwestie związane z przetwarzaniem odpowiedzialny będzie sam serwer. Są one najczęściej wykorzystywane do podziału zapytania na różne części, np. nagłówki i zawartość, by uniknąć długiego czasu przetwarzania w razie wystąpienia błędów.
Kody powodzenia (2xx)
Co ciekawe, mimo że większość użytkowników nie ma bezpośredniej styczności z kodami 2xx, na sprawnie działającej stronie będą one wykorzystywane właściwie przy większości odpowiedzi. Są one przeznaczone do stosowania przy pomyślnym wypełnieniu zapytania – np. do wyświetlenia zawartości strony. Oto kilka kodów z tej grupy, które warto znać:
200 OK – ogólny, uniwersalny status zwracany jako poprawna odpowiedź serwera;
201 Created – kod oznaczający utworzenie zasobu, stosowany np. przy dodaniu nowego wpisu do bazy;
202 Accepted – informuje o przyjęciu zapytania w sytuacji, gdy jego przetwarzanie jeszcze się nie skończyło;
204 No Content – zapytanie zostało zrealizowane, ale serwer nie ma żadnej treści do zwrotu, np. przy usuwaniu zasobów.
Również w tym przypadku dodatkowa praca przeważnie będzie zbędna. Warto jednak mieć na uwadze, że kod 200 powinien zawsze oznaczać poprawne wyświetlenie strony lub pliku.
Przekierowania – kody 3xx
To grupa kodów, która ma spore znaczenie nie tylko dla funkcjonowania strony internetowej, lecz także dla pozycjonowania. Odpowiedzi z zakresu 300–399 (a właściwie 300–310, ponieważ pozostałe nie mają standardowej definicji) oznaczają, że zasoby potrzebne do wypełnienia zapytania są dostępne, jednak znajdują się w innym miejscu na serwerze. Może mieć to miejsce m.in. wtedy, gdy zmieniamy strukturę adresów URL na stronie. Co ważne, istnieje rozróżnienie pomiędzy stałym a tymczasowym przekierowaniem:
301 Moved Permanently – stałe przekierowanie, używane wtedy, gdy dany zasób (np. podstrona) ma być wyszukiwany pod nowym adresem;
302 Found – przekierowanie tymczasowe; zapytania w przyszłości powinny być kierowane na pierwotny URL.
Z reguły kody 301 są bardziej przyjazne SEO, jednak z perspektywy użytkownika obie z powyższych odpowiedzi będą mieć podobne znaczenie. W obydwóch przypadkach efektem będzie przekierowanie na nową wersję strony. Należy zaznaczyć, że w większości sytuacji zaleca się minimalizowanie wykorzystania kodów 3xx – mogą one negatywnie wpływać m.in. na indeksowanie witryny oraz pozycjonowanie.
Kody 4xx, czyli błędy po stronie klienta
To odpowiedzi, z którymi możemy spotkać się stosunkowo często – zwłaszcza w przypadku błędu 404 oznaczającego brak żądanej zawartości. Oprócz tego warto wyróżnić kilka innych typowych problemów:
400 Bad Request – nieprawidłowe zapytanie, przeważnie z powodu niepoprawnej składni (np. nieobsługiwane znaki w treści);
401 Unauthorized – nieautoryzowany dostęp (np. dla zasobów, które wymagają logowania);
403 Forbidden – zasoby nie mogą zostać zwrócone ze względów bezpieczeństwa;
429 Too Many Requests – wykorzystywany wtedy, gdy serwer otrzyma w krótkim czasie zbyt wiele zapytań.
Jak obsłużyć tego typu błędy, by zapewnić komfortowe korzystanie ze strony nawet w razie problemów z zapytaniami? Przede wszystkim warto zwrócić uwagę na odpowiednie zaprezentowanie użytkownikowi informacji o błędzie. Dobrym sposobem będzie przygotowanie podstron na konkretne odpowiedzi, w szczególności dla kodu 404. Sam kod HTTP nie musi koniecznie znajdować się w zawartości. Zamiast niego często bardziej zrozumiały będzie krótki opis problemu – może on jednak iść w parze z kodem, by ułatwić zgłaszanie i diagnozowanie błędów.
Kolejną ważną kwestią przy błędach klienta jest umożliwienie powrotu do wcześniej wykonywanych czynności. Oznacza to, że podstrona prezentująca błąd nie powinna być „ślepą uliczką” – powinny się na niej znaleźć m.in. linki prowadzące do poprzedniej sekcji witryny lub do strony głównej. W przypadku gdy błąd wynika z braku zasobów (m.in. wtedy, gdy sklep internetowy nie ma produktu pod danym adresem URL), warto dołączyć do podstrony wyszukiwarkę, która pozwoli na sprawną kontynuację korzystania ze strony.
Błędy serwera – kody 5xx
Najczęściej wykorzystywane kody w tej grupie to 500 Internal Server Error (wewnętrzny błąd serwera) i 503 Service Unavailable (usługa niedostępna – stosowany m.in. przy przeciążeniu serwera). Tego typu odpowiedzi wiążą się przeważnie z tymczasowym brakiem możliwości korzystania ze strony. Z tego względu nie będzie potrzebne stosowanie linków czy udostępnianie wyszukiwarki. Zamiast tego należy skupić się na przygotowaniu podstrony z jasną prezentacją błędu. Dobrym pomysłem może być także zamieszczenie informacji kontaktowych, które pozwolą użytkownikom zorientować się, kiedy strona będzie dostępna ponownie.