Protok贸艂 Transferu Hipertekstu (HTTP)

Protok贸艂 World Wide Web do 偶膮dania i serwowania stron internetowych.

Wprowadzenie do HTTP: J臋zyk Sieci Web

Wyobra藕 sobie, 偶e jeste艣 w bibliotece. Podchodzisz do lady bibliotecznej (serwer) i sk艂adasz pro艣b臋 o konkretn膮 ksi膮偶k臋 (zas贸b, taki jak strona internetowa). Ty, osoba sk艂adaj膮ca pro艣b臋, jeste艣 klientem. Zestaw zasad, kt贸rych u偶ywasz do poproszenia o ksi膮偶k臋 i kt贸re pozwalaj膮 bibliotekarzowi odpowiedzie膰, to protok贸艂. W internecie tym fundamentalnym protoko艂em jest , czyli Protok贸艂 Transferu Hipertekstu. Jest to fundament komunikacji danych w World Wide Web, umo偶liwiaj膮cy przegl膮darkom pobieranie dokument贸w z serwer贸w.

W swej istocie HTTP to protok贸艂 typu 偶膮danie-odpowied藕, kt贸ry dzia艂a w oparciu o . Klient, zazwyczaj Twoja przegl膮darka internetowa, inicjuje komunikacj臋, wysy艂aj膮c komunikat 偶膮dania do serwera. Serwer, pot臋偶ny komputer hostuj膮cy pliki strony internetowej, przetwarza to 偶膮danie i odsy艂a komunikat odpowiedzi. Ta odpowied藕 mo偶e zawiera膰 偶膮dany dokument HTML, obraz lub po prostu informacj臋 o statusie 偶膮dania. Za ka偶dym razem, gdy klikasz link, wpisujesz adres internetowy lub ogl膮dasz obraz online, w tle odbywa si臋 ta cicha, b艂yskawiczna rozmowa.

Analiza Adresu Internetowego: Uniform Resource Locator (URL)

Zanim klient b臋dzie m贸g艂 z艂o偶y膰 偶膮danie, musi zna膰 dok艂adny adres zasobu, kt贸rego potrzebuje. Ten adres jest znany jako (Uniform Resource Locator). URL to specyficzny typ URI (Uniform Resource Identifier), kt贸ry nie tylko nazywa zas贸b, ale r贸wnie偶 okre艣la, jak go zlokalizowa膰. Przyjrzyjmy si臋 budowie typowego adresu URL na podstawie przyk艂adu z Twoich notatek: http://www.cisco.com/web-server.htm.

  1. Schemat (Protok贸艂): http:

    To pierwsza cz臋艣膰 adresu URL, ko艅cz膮ca si臋 dwukropkiem. Informuje przegl膮dark臋, jakiego protoko艂u nale偶y u偶y膰 do komunikacji. W tym przypadku jest to httphttp. Innym bardzo popularnym schematem jest httpshttps, kt贸ry wskazuje na bezpieczne po艂膮czenie. Po schemacie nast臋puj膮 dwukropek i dwa uko艣niki (://).

  2. Host (Nazwa serwera): www.cisco.com

    Ten komponent identyfikuje serwer, na kt贸rym znajduje si臋 zas贸b. Jest to przyjazna dla u偶ytkownika nazwa domenowa, kt贸ra odpowiada numerycznemu serwera (np. 198.133.219.25198.133.219.25). Tw贸j komputer u偶ywa systemu zwanego (Domain Name System), aby przet艂umaczy膰 t臋 czyteln膮 dla cz艂owieka nazw臋 na adres IP zrozumia艂y dla maszyn.

  3. 艢cie偶ka: /web-server.htm

    艢cie偶ka wskazuje na konkretny plik lub zas贸b 偶膮dany na serwerze. To jak podawanie 艣cie偶ki do folderu i pliku na w艂asnym komputerze. 艢cie偶ka zawsze zaczyna si臋 od pojedynczego uko艣nika. W tym przyk艂adzie 偶膮damy pliku o nazwie web-server.htm z g艂贸wnego katalogu serwera.

  4. Komponenty opcjonalne (nie w tym przyk艂adzie):
    • Port: Specyficzna "brama" na serwerze dla po艂膮czenia. HTTP domy艣lnie u偶ywa portu 8080, a HTTPS portu 443443. Je艣li u偶ywany jest inny port, jest on podawany po ho艣cie, oddzielony dwukropkiem, np. :8080.
    • Ci膮g zapytania (Query String): Zaczyna si臋 od znaku zapytania (?) i s艂u偶y do przesy艂ania dodatkowych danych do serwera, cz臋sto w postaci par klucz-warto艣膰 (np. ?szukaj=sieci&strona=2).
    • Fragment: Zaczyna si臋 od symbolu krzy偶yka (#) i wskazuje na konkretn膮 sekcj臋 wewn膮trz 偶膮danego zasobu (np. #sekcja2), do kt贸rej przegl膮darka mo偶e przeskoczy膰 po za艂adowaniu strony.

Szczeg贸艂owy Cykl 呕膮danie-Odpowied藕 HTTP

Komunikacja mi臋dzy klientem a serwerem zawsze odbywa si臋 w 艣cis艂ym cyklu 偶膮danie-odpowied藕. Klient wysy艂a 偶膮danie, a serwer odsy艂a odpowied藕. Nie mog膮 m贸wi膰 w tym samym czasie. Przeanalizujmy struktur臋 tych komunikat贸w.

Komunikat 呕膮dania HTTP

Komunikat 偶膮dania HTTP sk艂ada si臋 z linii 偶膮dania, serii nag艂贸wk贸w, pustej linii i opcjonalnego cia艂a komunikatu.

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Accept-Language: pl-PL
Accept-Encoding: gzip, deflate
Connection: keep-alive
  • Linia 偶膮dania: Pierwsza linia okre艣la (np. GET), 艣cie偶k臋 do zasobu i wersj臋 protoko艂u HTTP.
  • Nag艂贸wki: S膮 to pary klucz-warto艣膰, kt贸re dostarczaj膮 dodatkowych informacji o 偶膮daniu, takich jak host, typ przegl膮darki (User-Agent) oraz akceptowalne j臋zyki.
  • Cia艂o: Nieobecne w 偶膮daniach GET, ale w metodach takich jak POST zawiera dane wysy艂ane do serwera (np. dane z formularza).

Komunikat Odpowiedzi HTTP

Odpowied藕 serwera ma podobn膮 struktur臋, z lini膮 statusu, nag艂贸wkami, pust膮 lini膮 i cia艂em komunikatu zawieraj膮cym 偶膮dany zas贸b.

HTTP/1.1 200 OK
Date: Mon, 23 May 2025 22:38:34 GMT
Server: Apache/2.4.1 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 122

<!DOCTYPE html>
<html>
...
</html>
  • Linia statusu: Pierwsza linia zawiera wersj臋 HTTP, numeryczny (np. 200) i tekstowy opis statusu (np. OK).
  • Nag艂贸wki: Pary klucz-warto艣膰 opisuj膮ce odpowied藕, takie jak data, typ serwera i typ zawarto艣ci w ciele (Content-Type).
  • Cia艂o: Rzeczywisty zas贸b 偶膮dany przez klienta, w tym przypadku kod HTML strony internetowej.

Metody HTTP: Czasowniki Sieci

Metody HTTP, czasem nazywane czasownikami HTTP, okre艣laj膮 dzia艂anie, kt贸re klient chce, aby serwer wykona艂 na danym zasobie. Cho膰 istnieje kilka metod, najpopularniejsze z nich s膮 fundamentalne dla niemal wszystkich interakcji w sieci.

GET
To najcz臋艣ciej u偶ywana metoda. 呕膮danie GETGET s艂u偶y do pobierania danych z serwera. Kiedy wpisujesz adres URL w przegl膮darce, inicjujesz 偶膮danie GET. 呕膮dania te powinny jedynie pobiera膰 dane i nie powinny mie膰 偶adnego innego wp艂ywu na serwer (w艂a艣ciwo艣膰 zwana bezpiecze艅stwem). Wszelkie dane wysy艂ane z 偶膮daniem GET s膮 do艂膮czane do adresu URL jako ci膮g zapytania, co czyni je widocznymi i ogranicza ich d艂ugo艣膰.
POST
呕膮danie POSTPOST s艂u偶y do wysy艂ania danych na serwer w celu utworzenia nowego zasobu. Kiedy wype艂niasz formularz kontaktowy lub podajesz dane logowania, Twoja przegl膮darka wysy艂a 偶膮danie POST. Dane s膮 zawarte w ciele 偶膮dania, a nie w adresie URL, co czyni je bardziej bezpiecznymi dla poufnych informacji i pozwala na przesy艂anie znacznie wi臋kszej ilo艣ci danych. 呕膮dania POST nie s膮 bezpieczne, poniewa偶 modyfikuj膮 dane na serwerze, i nie s膮 , co oznacza, 偶e powtarzaj膮ce si臋 identyczne 偶膮dania utworz膮 wiele zasob贸w.
PUT
Metoda PUTPUT s艂u偶y do aktualizacji istniej膮cego zasobu lub jego utworzenia, je艣li nie istnieje. Zast臋puje ca艂y docelowy zas贸b danymi dostarczonymi w ciele 偶膮dania. Kluczow膮 r贸偶nic膮 mi臋dzy POST a PUT jest to, 偶e PUT jest idempotentne. Wielokrotne wysy艂anie tego samego 偶膮dania PUT zawsze doprowadzi do tego samego stanu na serwerze.
DELETE
Jak sama nazwa wskazuje, metoda DELETEDELETE 偶膮da usuni臋cia okre艣lonego zasobu z serwera. Podobnie jak PUT, operacje DELETE s膮 idempotentne; wielokrotne usuwanie zasobu ma taki sam efekt jak jednokrotne.
HEAD
Metoda HEADHEAD jest identyczna z 偶膮daniem GET, ale serwer nie wysy艂a cia艂a komunikatu w odpowiedzi. S艂u偶y do pobierania samych nag艂贸wk贸w dla zasobu, co mo偶e by膰 przydatne do sprawdzenia, czy zas贸b istnieje, jaki ma rozmiar lub kiedy by艂 ostatnio modyfikowany, bez konieczno艣ci pobierania ca艂ej zawarto艣ci.

Kody Statusu HTTP: Odpowied藕 Serwera

Ka偶da odpowied藕 HTTP zawiera trzycyfrowy kod statusu, kt贸ry informuje klienta o wyniku jego 偶膮dania. Kody te s膮 pogrupowane w pi臋膰 klas, oznaczonych pierwsz膮 cyfr膮. Ich zrozumienie jest kluczowe do rozwi膮zywania problem贸w.

  • 1xx (Informacyjne): 呕膮danie zosta艂o odebrane, proces jest kontynuowany. Rzadko widoczne dla u偶ytkownik贸w ko艅cowych. Przyk艂ad: 100Continue100 Continue.
  • 2xx (Sukces): 呕膮danie zosta艂o pomy艣lnie odebrane, zrozumiane i zaakceptowane.
    • 200聽OK\text{200 OK}: Standardowa odpowied藕 dla pomy艣lnego 偶膮dania. Cia艂o odpowiedzi b臋dzie zawiera艂o 偶膮dany zas贸b.
    • 201聽Created\text{201 Created}: 呕膮danie zako艅czy艂o si臋 sukcesem, a w jego wyniku utworzono nowy zas贸b (np. po 偶膮daniu POST).
  • 3xx (Przekierowanie): Wymagane jest dalsze dzia艂anie ze strony klienta, aby zako艅czy膰 偶膮danie. Klient musi uda膰 si臋 pod inny adres URL.
    • 301聽Moved聽Permanently\text{301 Moved Permanently}: 呕膮dany zas贸b zosta艂 trwale przeniesiony pod nowy adres URL. Przegl膮darka powinna zaktualizowa膰 swoje zak艂adki.
    • 302聽Found\text{302 Found}: Zas贸b zosta艂 tymczasowo przeniesiony pod inny adres URL. Przegl膮darka powinna nadal u偶ywa膰 oryginalnego adresu URL w przysz艂ych 偶膮daniach.
  • 4xx (B艂膮d Klienta): 呕膮danie zawiera b艂臋dn膮 sk艂adni臋 lub nie mo偶e zosta膰 spe艂nione. B艂膮d le偶y po stronie klienta.
    • 400聽Bad聽Request\text{400 Bad Request}: Serwer nie mo偶e lub nie b臋dzie przetwarza艂 偶膮dania z powodu b艂臋du postrzeganego jako b艂膮d klienta (np. zniekszta艂cona sk艂adnia 偶膮dania).
    • 403聽Forbidden\text{403 Forbidden}: Klient nie ma uprawnie艅 dost臋pu do zawarto艣ci. Jest uwierzytelniony, ale nieautoryzowany.
    • 404聽Not聽Found\text{404 Not Found}: Serwer nie mo偶e znale藕膰 偶膮danego zasobu. To jeden z najs艂ynniejszych kod贸w statusu w sieci.
  • 5xx (B艂膮d Serwera): Serwer nie zdo艂a艂 zrealizowa膰 pozornie prawid艂owego 偶膮dania. B艂膮d le偶y po stronie serwera.
    • 500聽Internal聽Server聽Error\text{500 Internal Server Error}: Og贸lny komunikat o b艂臋dzie, zwracany, gdy wyst膮pi艂 nieoczekiwany problem i 偶aden bardziej szczeg贸艂owy komunikat nie jest odpowiedni.
    • 503聽Service聽Unavailable\text{503 Service Unavailable}: Serwer nie jest gotowy do obs艂ugi 偶膮dania, cz臋sto z powodu konserwacji lub przeci膮偶enia.

Ewolucja HTTP

HTTP nie powsta艂 jednego dnia. Znacz膮co ewoluowa艂 od swoich pocz膮tk贸w, aby sprosta膰 rosn膮cym wymaganiom sieci, skupiaj膮c si臋 na poprawie wydajno艣ci i efektywno艣ci.

HTTP/0.9 - Protok贸艂 Jednoliniowy (1991)
Pierwsza wersja. By艂a niezwykle prosta: 偶膮danie sk艂ada艂o si臋 z jednej linii, metody GETGET i 艣cie偶ki do zasobu. Odpowiedzi膮 by艂 sam plik HTML, bez nag艂贸wk贸w, kod贸w statusu czy innych metadanych.
HTTP/1.0 - Budowanie Rozszerzalno艣ci (1996)
Ta wersja wprowadzi艂a kluczowe funkcje, kt贸rych u偶ywamy do dzi艣: nag艂贸wki dla 偶膮da艅 i odpowiedzi, kody statusu w odpowiedziach oraz mo偶liwo艣膰 przesy艂ania plik贸w innych ni偶 HTML (jak obrazy i wideo). G艂贸wnym ograniczeniem by艂o to, 偶e dla ka偶dego zasobu musia艂o by膰 nawi膮zywane nowe po艂膮czenie , co by艂o nieefektywne dla stron z wieloma obrazami.
HTTP/1.1 - Standard Internetowy (1997)
Przez ponad 15 lat HTTP/1.1 stanowi艂 fundament sieci. Wprowadzi艂 kluczowe optymalizacje wydajno艣ci. Najwa偶niejsz膮 by艂y (za pomoc膮 nag艂贸wka `Keep-Alive`, p贸藕niej domy艣lne), kt贸re pozwala艂y przegl膮darce na pobranie wielu zasob贸w przez jedno po艂膮czenie TCP, drastycznie redukuj膮c op贸藕nienia. Wprowadzi艂 r贸wnie偶 potokowo艣膰 偶膮da艅 (request pipelining), transfery porcjowane (chunked transfers) i obowi膮zkowy nag艂贸wek `Host`.

Zabezpieczanie Sieci: Co oznacza 'S' w HTTPS?

Na pocz膮tku istnienia sieci WWW ca艂y ruch HTTP by艂 przesy艂any otwartym tekstem. Oznacza艂o to, 偶e ka偶dy, kto pods艂uchiwa艂 sie膰, m贸g艂 z 艂atwo艣ci膮 odczyta膰 wszystkie dane wymieniane mi臋dzy przegl膮dark膮 a serwerem, w tym has艂a i numery kart kredytowych. Aby za艂ata膰 t臋 ogromn膮 dziur臋 bezpiecze艅stwa, opracowano (Hypertext Transfer Protocol Secure).

HTTPS nie jest oddzielnym protoko艂em; to po prostu HTTP dzia艂aj膮cy przez szyfrowane po艂膮czenie. Szyfrowanie to jest obs艂ugiwane przez protok贸艂 o nazwie (Transport Layer Security), dawniej znany jako SSL (Secure Sockets Layer).

Oto jak to dzia艂a w uproszczeniu:

  1. Weryfikacja Certyfikatu: Kiedy Twoja przegl膮darka 艂膮czy si臋 ze stron膮 przez HTTPS, serwer najpierw przedstawia sw贸j certyfikat SSL/TLS. Ten cyfrowy certyfikat dzia艂a jak dow贸d osobisty, potwierdzaj膮c to偶samo艣膰 serwera Twojej przegl膮darce. Jest on wydawany i weryfikowany przez zaufan膮 stron臋 trzeci膮 zwan膮 Urz臋dem Certyfikacji (CA).
  2. Uzgadnianie (Handshake): Nast臋pnie klient i serwer przeprowadzaj膮 proces zwany uzgadnianiem TLS. W trakcie tego procesu u偶ywaj膮 informacji z certyfikatu (w szczeg贸lno艣ci klucza publicznego), aby bezpiecznie uzgodni膰 wsp贸lny, tajny klucz sesji.
  3. Szyfrowana Komunikacja: Po zako艅czeniu uzgadniania ca艂y p贸藕niejszy ruch HTTP mi臋dzy klientem a serwerem jest szyfrowany przy u偶yciu tego klucza sesji. Ka偶dy, kto przechwyci te dane, zobaczy jedynie zaszyfrowany, nieczytelny strumie艅 znak贸w. Zapewnia to poufno艣膰, integralno艣膰 i uwierzytelnienie Twojej komunikacji internetowej.

Nowoczesne przegl膮darki, takie jak Chrome, oznaczaj膮 teraz ka偶d膮 stron臋 niekorzystaj膮c膮 z HTTPS jako "Niezabezpieczon膮", a bezpieczn膮 witryn臋 mo偶na rozpozna膰 po ikonie k艂贸dki na pasku adresu obok adresu URL, kt贸ry zawsze zaczyna si臋 od https://.

Wyzwanie Stanu w Protokole Bezstanowym

Jedn膮 z podstawowych zasad projektowych HTTP jest to, 偶e jest to . Oznacza to, 偶e ka偶dy cykl 偶膮danie-odpowied藕 jest ca艂kowicie niezale偶ny. Kiedy serwer otrzymuje 偶膮danie, nie pami臋ta 偶adnych poprzednich 偶膮da艅 od tego samego klienta.

Ta prostota jest pot臋偶na pod wzgl臋dem skalowalno艣ci, ale stwarza problem przy tworzeniu interaktywnych do艣wiadcze艅 internetowych. Jak sklep internetowy pami臋ta produkty w Twoim koszyku? Jak strona utrzymuje Ci臋 zalogowanym, gdy przechodzisz z jednej podstrony na drug膮?

Rozwi膮zaniem jest u偶ycie (cookies). Ciasteczko to ma艂y fragment danych, kt贸ry serwer wysy艂a do przegl膮darki w nag艂贸wku odpowiedzi (Set-Cookie). Przegl膮darka przechowuje to ciasteczko, a nast臋pnie odsy艂a je z powrotem do serwera przy ka偶dym kolejnym 偶膮daniu w nag艂贸wku 偶膮dania (Cookie). To ciasteczko mo偶e zawiera膰 unikalny identyfikator sesji, pozwalaj膮c serwerowi na odnalezienie stanu u偶ytkownika (takiego jak jego koszyk zakup贸w lub status logowania) i zapewnienie ci膮g艂ego, stanowego do艣wiadczenia w ramach wielu bezstanowych 偶膮da艅.

    Protok贸艂 Transferu Hipertekstu (HTTP) | Teleinf Edu