W kolejnym module ścieżki sieciowej na platformie TryHackMe poznajemy protokół HTTP (HyperText Transfer Protocol) oraz jego bezpieczną wersję HTTPS (HyperText Transfer Protocol Secure).

HTTP a HTTPS

Protokół HTTP został opracowany przez Tima Bernersa-Lee w latach 1989–1991. Definiuje reguły komunikacji klient–serwer, przesyłając dane w postaci jawnego tekstu (domyślnie na porcie 80).

HTTPS to zabezpieczona wersja protokołu HTTP (działająca domyślnie na porcie 443). Ruch HTTPS jest szyfrowany za pomocą protokołu TLS, co zapewnia:

  • Poufność – uniemożliwia podglądanie przesyłanych danych osobom trzecim w sieci.
  • Integralność – zabezpiecza dane przed modyfikacją w trakcie transmisji.
  • Uwierzytelnienie – daje pewność, że łączymy się z właściwym serwerem, a nie ze stroną podszywającą się pod niego.

Struktura adresu URL

Adres URL (Uniform Resource Locator) to jednoznaczna instrukcja wskazująca przeglądarce, gdzie znajduje się dany zasób w sieci i za pomocą jakiego protokołu należy go pobrać.

Przykładowy pełny adres URL:

https://user:password@tryhackme.com:443/blog?id=1#sekcja

Pełny adres URL może składać się z następujących elementów:

  • Schemat (Scheme) – określa protokół wykorzystywany do komunikacji (np. http, https, ftp).
  • Użytkownik (User) – opcjonalne dane uwierzytelniające (login i hasło) przekazywane bezpośrednio w adresie dla usług wymagających autoryzacji.
  • Host – nazwa domeny lub adres IP serwera docelowego (np. tryhackme.com).
  • Port – numer portu sieciowego, na którym serwer nasłuchuje na połączenia (domyślnie 80 dla HTTP i 443 dla HTTPS, z dopuszczalnego zakresu od 1 do 65535).
  • Ścieżka (Path) – dokładna lokalizacja lub nazwa żądanego pliku/zasobu na serwerze.
  • Parametry zapytania (Query String) – dodatkowe dane przekazywane do zasobu po znaku zapytania, w formacie klucz=wartość (np. /blog?id=1).
  • Fragment – odwołanie do konkretnego miejsca na stronie po znaku kratki (#), pozwalające przeglądarce automatycznie przewinąć widok do wskazanego elementu.

Budowa żądania HTTP

Minimalne żądanie HTTP może składać się z pojedynczej linii (np. GET / HTTP/1.1), jednak w praktyce przeglądarki przesyłają bogaty zestaw nagłówków zawierających dodatkowe informacje dla serwera.

Przykładowe żądanie HTTP:

GET / HTTP/1.1
Host: tryhackme.com
User-Agent: Mozilla/5.0 Firefox/87.0
Referer: https://tryhackme.com/

Rozbicie poszczególnych linii zapytania:

  • Linia 1: Określa metodę żądania (GET), pobieraną ścieżkę (strona główna /) oraz wersję protokołu (HTTP/1.1).
  • Linia 2 (Host): Wskazuje nazwę domeny serwera docelowego, co umożliwia obsługę wielu stron na jednym adresie IP.
  • Linia 3 (User-Agent): Informuje serwer o rodzaju oraz wersji przeglądarki i systemu operacyjnego klienta.
  • Linia 4 (Referer): Zawiera adres strony internetowej, z której nastąpiło przekierowanie do bieżącego zasobu.
  • Linia 5: Pusta linia kończąca nagłówki, informująca serwer o zakończeniu przesyłania żądania.

Kody odpowiedzi HTTP

W pierwszej linii odpowiedzi serwer zwraca kod statusu informujący klienta o wyniku przetwarzania żądania. Kody dzielą się na pięć głównych grup:

  • 100–199 (Informacyjne) – informują o przyjęciu wstępnej części żądania i oczekiwaniu na dalsze dane (rzadko spotykane).
  • 200–299 (Sukces) – potwierdzają pomyślne zrealizowanie żądania klienta.
  • 300–399 (Przekierowanie) – informują o konieczności przekierowania żądania pod inny adres zasobu.
  • 400–499 (Błędy klienta) – sygnalizują błędy po stronie klienta (np. brak autoryzacji, błąd w zapytaniu lub nieistniejący zasób).
  • 500–599 (Błędy serwera) – oznaczają problem po stronie serwera uniemożliwiający poprawną obsługę żądania.

Najpopularniejsze kody odpowiedzi:

  • 200 OK – żądanie zostało wykonane pomyślnie.
  • 201 Created – zasób został pomyślnie utworzony na serwerze.
  • 301 Moved Permanently – zasób został trwale przeniesiony pod nowy adres URL.
  • 302 Found – tymczasowe przekierowanie pod inny adres URL.
  • 400 Bad Request – zapytanie zawiera błędy składniowe lub brakuje w nim wymaganych parametrów.
  • 401 Unauthorized – dostęp wymaga wcześniejszego uwierzytelnienia (np. logowania).
  • 403 Forbidden – brak uprawnień do przeglądania zasobu (niezależnie od logowania).
  • 404 Page Not Found – żądany zasób nie istnieje pod wskazanym adresem.
  • 405 Method Not Allowed – użyta metoda HTTP nie jest dozwolona dla tego zasobu.
  • 500 Internal Server Error – ogólny błąd wewnętrzny serwera.
  • 503 Service Unavailable – serwer jest przeciążony lub wyłączony z powodu prac serwisowych.