Przejdź do głównej zawartości

HTTP Status Codes - znaczenie i praktyka

Kody statusu HTTP (HTTP Status Codes) sa trzycyfrowymi numerami zwracanymi przez serwer w odpowiedzi na zadanie klienta. Stanowia fundamentalny element komunikacji w protokole HTTP, informujac klienta o wyniku przetwarzania zadania. Prawidłowe rozumienie i stosowanie kodow statusu jest kluczowe dla budowania niezawodnych aplikacji webowych, poprawy SEO oraz zapewnienia dobrego doswiadczenia użytkownika.

Kody HTTP sa podzielone na 5 klas, gdzie pierwsza cyfra okresla kategorie odpowiedzi:

KlasaZakresZnaczeniePrzykład
1xx100-199Informacyjne100 Continue
2xx200-299Sukces200 OK
3xx300-399Przekierowanie301 Moved Permanently
4xx400-499Błąd klienta404 Not Found
5xx500-599Błąd serwera500 Internal Server Error
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1234
Cache-Control: max-age=3600
{"data": "..."}

Pierwsza linia (status line) zawiera wersje protokołu, kod statusu i komunikat.

Te kody sa rzadko używane bezposrednio przez programistow:

  • 100 Continue - serwer otrzymał nagłówki zadania i klient może kontynuowac wysyłanie ciała
  • 101 Switching Protocols - serwer akceptuje zmiane protokołu (np. upgrade do WebSocket)

200 OK

Standardowa odpowiedz sukcesu. Zadanie zostało przetworzone poprawnie.

201 Created

Zasob został pomyslnie utworzony. Czesto zawiera nagłówek Location z URI nowego zasobu.

204 No Content

Sukces, ale brak ciała odpowiedzi. Typowe dla DELETE lub PUT.

206 Partial Content

Czesciowa odpowiedz (np. przy pobieraniu fragmentu pliku).

  1. 301 Moved Permanently

    Zasob został trwale przeniesiony pod nowy adres. Przegladarki i wyszukiwarki aktualizuja swoje rekordy. Kluczowy dla SEO.

  2. 302 Found (Previously “Moved Temporarily”)

    Tymczasowe przekierowanie. Oryginalny URI powinien być używany w przyszłości.

  3. 304 Not Modified

    Zasob nie zmienił się od ostatniego zadania. Pozwala na efektywne cachowanie.

  4. 307 Temporary Redirect

    Jak 302, ale gwarantuje zachowanie metody HTTP (np. POST pozostaje POST).

  5. 308 Permanent Redirect

    Jak 301, ale gwarantuje zachowanie metody HTTP.

KodNazwaOpis
400Bad RequestNiepoprawna składnia zadania
401UnauthorizedBrak uwierzytelnienia (wymagane logowanie)
403ForbiddenBrak autoryzacji (zalogowany, ale bez uprawnien)
404Not FoundZasob nie istnieje
405Method Not AllowedMetoda HTTP niedozwolona dla zasobu
409ConflictKonflikt z aktualnym stanem zasobu
422Unprocessable EntityPoprawna składnia, ale błędy semantyczne
429Too Many RequestsPrzekroczono limit zapytan (rate limiting)
KodNazwaOpis
500Internal Server ErrorOgolny błąd serwera
501Not ImplementedFunkcjonalnosc nieobsługiwana
502Bad GatewayBłąd proxy/bramy
503Service UnavailableSerwer przeciazony lub w trybie konserwacji
504Gateway TimeoutTimeout przy komunikacji z upstream serwerem
<?php
// Zwrocenie 404 Not Found
http_response_code(404);
echo json_encode(['error' => 'Użytkownik nie znaleziony']);
// Przekierowanie 301
header('Location: https://example.com/nowy-adres', true, 301);
exit;
// Utworzenie zasobu - 201 Created
http_response_code(201);
header('Location: /api/users/123');
echo json_encode(['id' => 123, 'name' => 'Jan Kowalski']);
// Błąd walidacji - 422 Unprocessable Entity
http_response_code(422);
echo json_encode([
'errors' => [
'email' => 'Niepoprawny format adresu email',
'password' => 'Hasło musi mieć minimum 8 znakow'
]
]);
async function fetchUser(id) {
const response = await fetch(`/api/users/${id}`);
switch (response.status) {
case 200:
return await response.json();
case 401:
window.location.href = '/login';
break;
case 403:
throw new Error('Brak uprawnien do tego zasobu');
case 404:
throw new Error('Użytkownik nie znaleziony');
case 500:
throw new Error('Błąd serwera. Sprobuj ponownie później.');
default:
throw new Error(`Nieoczekiwany kod: ${response.status}`);
}
}
fetch('/api/data')
.then(response => {
console.log('Status:', response.status);
console.log('Status Text:', response.statusText);
console.log('Content-Type:', response.headers.get('Content-Type'));
console.log('Cache-Control:', response.headers.get('Cache-Control'));
return response.json();
});
  • 301 - przekazuje “link juice” do nowego adresu, ważny przy migracji strony
  • 404 - wyszukiwarki usuwaja strone z indeksu po pewnym czasie
  • 503 - informuje crawlery, że przerwa jest tymczasowa (z nagłówkiem Retry-After)
  • Soft 404 - strona zwraca 200 ale wyświetla “nie znaleziono” - źle dla SEO

Przyjazne strony błędów

Zamiast domyslnej strony 404, wyswietl uzyteczna informacje z linkami nawigacyjnymi i wyszukiwarka.

Informowanie o postepie

Przy długich operacjach można użyć 202 Accepted i polling lub WebSocket.

Kody statusu HTTP sa kluczowym elementem komunikacji webowej. Prawidłowe ich stosowanie:

  • Umozliwia automatyczna obsługę błędów przez klientow
  • Poprawia SEO dzieki właściwym przekierowaniom i sygnałom dla wyszukiwarek
  • Ułatwia debugowanie i monitorowanie aplikacji
  • Zapewnia lepsze doswiadczenie użytkownika

Najważniejsze kody do zapamietania:

  • 200 - sukces, 201 - utworzono, 204 - sukces bez ciała
  • 301 - przekierowanie trwale, 304 - nie zmodyfikowano
  • 400 - źle zadanie, 401 - niezalogowany, 403 - brak uprawnien, 404 - nie znaleziono
  • 500 - błąd serwera, 503 - serwis niedostepny