Protokół HTTP (Hypertext Transfer Protocol) stanowi podstawę współczesnego internetu, umożliwiając komunikację między przeglądarkami a serwerami. W modelu żądanie–odpowiedź klient (np. przeglądarka) wysyła zapytanie do serwera, a serwer odsyła treść. Mimo ewolucji – od 0.9, przez 1.0 i 1.1, po HTTP/2 i HTTP/3 – zasada działania pozostała ta sama, a nowsze wersje przynoszą znaczące ulepszenia wydajności i bezpieczeństwa.

Fundamenty protokołu HTTP i historia jego powstania

HTTP to protokół warstwy aplikacji działający w architekturze klient–serwer. Umożliwia przeglądanie stron WWW, pobieranie plików, przesyłanie formularzy i komunikację API. HTTP opiera się na stosie TCP/IP, zapewniając niezawodne dostarczanie danych.

Pierwsza specyfikacja HTTP/0.9 (1991) obsługiwała tylko metodę GET. W 1996 roku HTTP/1.0 dodał kolejne metody (m.in. POST, HEAD), typy treści i bogatsze nagłówki, ale każde żądanie wymagało nowego połączenia TCP.

W 1997 r. HTTP/1.1 wprowadził trwałe połączenia (keep-alive), co przyspieszyło ładowanie stron. W 2015 r. HTTP/2 dodał multiplexing i kompresję nagłówków, znacząco poprawiając wydajność. Najnowsze HTTP/3 (2022) działa nad QUIC (UDP), zapewniając szybsze nawiązywanie połączenia i lepszą pracę w niestabilnych sieciach.

Dla szybkiego porównania wersji i ich wpływu na wydajność przyda się poniższe zestawienie:

Wersja Transport Najważniejsze cechy Efekt praktyczny
HTTP/1.0 TCP jedno żądanie na połączenie wysokie opóźnienia na stronach z wieloma zasobami
HTTP/1.1 TCP trwałe połączenia, ponowne użycie połączeń szybsze ładowanie niż 1.0
HTTP/2 TCP (+ TLS zwykle) multiplexing, kompresja nagłówków, priorytety znacznie mniej połączeń i krótszy czas ładowania
HTTP/3 QUIC (UDP) + TLS 1.3 brak blokowania HoL w transporcie, szybszy handshake lepsza wydajność i stabilność w sieciach mobilnych

Architektura klient–serwer w komunikacji HTTP

Serwer udostępnia zasoby i usługi, a klienci wysyłają żądania. HTTP jest bezstanowy – każde żądanie jest niezależne, co upraszcza skalowanie, ale utrudnia utrzymanie kontekstu (np. zalogowanie). Kontekst zapewniają ciasteczka (cookies) i mechanizmy sesji.

Połączenie zwykle zaczyna się od TCP na porcie 80 (HTTP). Klient wysyła linię startową, nagłówki i (opcjonalnie) ciało; serwer odsyła linię statusu, nagłówki i ciało. W HTTPS kanał jest szyfrowany protokołem TLS, ale mechanika żądanie–odpowiedź pozostaje taka sama.

Dla lepszego zrozumienia zobacz uproszczony przykład żądania i odpowiedzi:

GET /index.html HTTP/1.1
Host: example.com
Accept-Language: pl-PL

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234

[treść dokumentu HTML]

Metody HTTP i struktura żądań

Metody HTTP definiują rodzaj operacji na zasobie i często mapują się na CRUD (Create, Read, Update, Delete). Poniżej najczęściej używane metody:

  • GET – pobieranie danych, bezpieczna i cache’owalna; nie zmienia stanu zasobu i nie powinna mieć ciała;
  • POST – wysyłanie danych do serwera (np. formularze), zwykle tworzy nowe zasoby; nie jest idempotentna;
  • PUT – pełna aktualizacja istniejącego zasobu; metoda idempotentna;
  • DELETE – usuwanie wskazanego zasobu; typowo wymaga autoryzacji.

Inne przydatne metody w specyficznych scenariuszach:

  • HEAD – zwraca nagłówki bez treści, przydatna do sprawdzania dostępności i cache;
  • OPTIONS – informuje o możliwościach komunikacji z zasobem (np. CORS);
  • TRACE – diagnostyka ścieżki żądania przez pośredników;
  • CONNECT – tunelowanie przez pośrednika (np. dla HTTPS);
  • PATCH – częściowa modyfikacja zasobu.

Struktura żądania składa się z linii startowej, nagłówków i opcjonalnego ciała. Nagłówek Host jest obowiązkowy w HTTP/1.1, a linie rozdzielane są CRLF.

Odpowiedzi serwera i kody statusu HTTP

Kody statusu dzielą się na klasy: 1xx (informacyjne), 2xx (sukces), 3xx (przekierowania), 4xx (błędy klienta), 5xx (błędy serwera). Poniżej najczęściej spotykane kody i ich znaczenie:

  • 200 OK – żądanie przetworzone pomyślnie; stały 200 to sygnał zdrowia witryny;
  • 301 Moved Permanently – trwałe przekierowanie na nowy URL, transfer autorytetu SEO;
  • 302 Found – przekierowanie tymczasowe, zwykle bez przeniesienia autorytetu;
  • 404 Not Found – zasób nie istnieje pod wskazanym adresem;
  • 410 Gone – zasób został trwale usunięty;
  • 500 Internal Server Error – błąd po stronie serwera (skrypty, baza, konfiguracja);
  • 501 Not Implemented – funkcja nieobsługiwana przez serwer;
  • 502 Bad Gateway – błędna odpowiedź serwera nadrzędnego;
  • 503 Service Unavailable – przeciążenie lub przerwa serwisowa.

Nagłówki HTTP i metadane komunikacji

Nagłówki przenoszą metadane żądań i odpowiedzi w formacie nazwa: wartość. Nazwy nagłówków są nieczułe na wielkość liter, a bez nich nie da się prowadzić negocjacji treści ani kontrolować cache.

Najczęstsze nagłówki w żądaniu i ich zastosowanie:

  • Host – wskazuje domenę serwera (obowiązkowy w HTTP/1.1);
  • Accept-Language – preferencje językowe klienta;
  • Content-Type – typ danych wysyłanych do serwera (np. application/json; charset=utf-8);
  • User-Agent – identyfikacja klienta (przeglądarka, system);
  • Authorization – dane uwierzytelniające.

Najczęstsze nagłówki w odpowiedzi i ich rola:

  • Server – informacja o oprogramowaniu serwera;
  • Content-Type – typ i kodowanie zwracanych danych;
  • Content-Length – rozmiar treści w bajtach;
  • Last-Modified – data ostatniej modyfikacji zasobu;
  • ETag – identyfikator wersji zasobu dla walidacji warunkowej;
  • Set-Cookie – ustawienie ciasteczka po stronie klienta;
  • Location – nowy adres przy odpowiedziach 3xx.

Dla kontekstu żądania w przeglądarce służą nagłówki z rodziny Sec-Fetch:

  • Sec-Fetch-Site – relacja pochodzeń (cross-site, same-origin, same-site, none);
  • Sec-Fetch-Mode – tryb żądania (cors, navigate, no-cors, same-origin, websocket);
  • Sec-Fetch-User – flaga interakcji użytkownika (?1);
  • Sec-Fetch-Dest – miejsce docelowe (document, image, style, script, video, itp.).

Bezpieczeństwo – różnice między HTTP i HTTPS oraz protokół SSL/TLS

HTTPS (Hypertext Transfer Protocol Secure) to szyfrowana wersja HTTP. Początkowo używano SSL, dziś standardem jest TLS. Szyfrowanie chroni przed podsłuchem i modyfikacją danych, co jest kluczowe w bankowości, e‑commerce i serwisach z logowaniem.

Domyślne porty to 80 (HTTP) i 443 (HTTPS). Klasyczne HTTPS (HTTP/1.1, HTTP/2) działa nad TLS/TCP na porcie 443, a HTTP/3 korzysta z QUIC (TLS/UDP) również na porcie 443.

TLS ustanawia szyfrowany kanał między klientem a serwerem z użyciem certyfikatu zawierającego klucz publiczny serwera. W trakcie wymiany uzgadniany jest symetryczny klucz sesyjny, którym szyfrowana jest dalsza komunikacja.

Przebieg nawiązywania zaufanego połączenia w skrócie:

  • serwer – prezentuje certyfikat z kluczem publicznym;
  • klient – weryfikuje ważność i łańcuch zaufania certyfikatu;
  • klient – uzgadnia tajny klucz sesji i szyfruje go kluczem publicznym serwera;
  • serwer – odszyfrowuje kluczem prywatnym i potwierdza uzgodnienie;
  • obie strony – szyfrują dalszą komunikację kluczem sesyjnym.

HTTPS jest preferowany przez Google, co ma znaczenie dla SEO. Popularne typy certyfikatów to DV, OV i EV oraz warianty Single Domain, Wildcard i Multidomain.

Ewolucja protokołu – HTTP/1, HTTP/2 i HTTP/3

HTTP/1.0 wykonywał jedno żądanie na połączenie, co spowalniało ładowanie zasobów. HTTP/1.1 wprowadził trwałe połączenia i możliwość obsługi wielu żądań przez to samo połączenie.

HTTP/2 dodał multiplexing i kompresję nagłówków, istotnie skracając czasy ładowania, ale nadal korzysta z TCP. HTTP/3 działa nad QUIC, co usuwa problem blokowania na poziomie transportu i poprawia stabilność w sieciach mobilnych. Wydajność protokołu przekłada się na lepsze SEO i doświadczenie użytkownika.

Praktyczne aspekty – ciasteczka, sesje i utrzymywanie stanu

HTTP jest bezstanowy, dlatego do utrzymania kontekstu (logowanie, koszyk) stosuje się ciasteczka i sesje po stronie serwera. Przeglądarka przechowuje ciasteczka i dołącza je do kolejnych żądań do tej samej domeny/ścieżki.

Najważniejsze atrybuty i ograniczenia ciasteczek:

  • czas wygaśnięcia – określa, kiedy przeglądarka przestanie wysyłać ciasteczko;
  • Secure – wysyłka tylko przez kanał HTTPS;
  • HttpOnly – niedostępne z poziomu JavaScript;
  • domena i ścieżka – ograniczają kontekst, w którym ciasteczko jest wysyłane;
  • rozmiar – zwykle limit ok. 4 KB na ciasteczko i ograniczona liczba na domenę.

Nagłówki Set-Cookie nie powinny być buforowane; aby usunąć ciasteczko, serwer wysyła je ponownie z datą wygaśnięcia w przeszłości.

Znaczenie HTTP w architekturze internetu i praktyczne zastosowania

HTTP jest wszechobecny: przeglądanie WWW, pobieranie plików, wysyłanie formularzy oraz komunikacja z usługami przez API. REST (Representational State Transfer) wykorzystuje standardowe metody GET, POST, PUT, DELETE do operacji na zasobach, z unikalnymi URL-ami.

HTTP i HTTPS są fundamentem e‑commerce, bankowości online, CRM i ERP. W projektach produkcyjnych kluczowe są: wydajność, zarządzanie połączeniami, obsługa błędów i monitorowanie. Szybsze protokoły (HTTP/2, HTTP/3) i HTTPS wspierają SEO oraz wygodę użytkownika.

Zagrożenia bezpieczeństwa i najlepsze praktyki

Niektóre firewalle blokują metody PUT i DELETE. W razie potrzeby stosuje się obejścia, np. nagłówki X-Method-Override lub X-HTTP-Method-Override do tunelowania przez POST.

Typowe zagrożenia to Man-in-the-Middle, CSRF, XSS i różne ataki wstrzyknięcia (np. SQL injection) wynikające z braku walidacji danych wejściowych. Aby minimalizować ryzyka, warto wdrożyć następujące praktyki:

  • zawsze używaj HTTPS – szyfruj dane in transit i w razie potrzeby at rest;
  • waliduj i filtruj dane wejściowe – po stronie serwera, ze ścisłymi regułami;
  • uwierzytelnianie i autoryzacja – stosuj sprawdzone mechanizmy i ogranicz uprawnienia;
  • CSP (Content Security Policy) – ogranicz źródła skryptów, styli i mediów;
  • HSTS – wymuszaj HTTPS dla domeny i subdomen;
  • ciasteczka z flagami Secure i HttpOnly – redukcja przechwyceń i dostępów skryptowych;
  • rate limiting – ochrona przed brute-force i DDoS na warstwie aplikacyjnej;
  • regularne aktualizacje, audyty i testy penetracyjne – wczesne wykrywanie podatności.