THM - Protokół HTTP
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.