Co to jest HTTP?
HTTP jako część Pakietu Protokołów Internetowych
HTTP jest częścią wartswy aplikacji (warstwy programistycznej) w Pakiecie Protokołów Internetowych (ang. Internet Protocol Suite) (powszechnie znanego jako TCP/IP).
Ogólnie, TCP/IP obejmuje następujące warstwy:
-
warstwa aplikacji - komunikacja proces-do-procesu, obecnie obejmuje HTTP, FTP, SSH, oraz SMTP,
-
warstwa transportu - komunikacja host-do-hosta (urządzenie-do-urządzenia), rządzona zasadami Protokołu Kontroli Transmisji (ang. Transmission Control Protocol, TCP) w HTTP/2 oraz Protokołu Datagramów Użytkownika (ang. User Datagram Protocol, UDP) w HTTP/3,
-
warstwa internetowa - komunikacja sieć-do-sieci, intersieciowość, oraz
-
warstwa łącza - komunikacja łączę-do-łącza wewnątrz pojedynczej sieci.
Początki HTTP
Rozwój TCP/IP, którego HTTP jest częścią, został zapoczątkowany w latach 60-tych XX wieku przez Agencję Zaawansowanych Projektów Badawczych Departamentu Obrony (ang. Defense Advanced Research Projects Agency, DARPA), która stworzyła Sieć Zaawansowanych Projektów Badawczych (Advanced Research Projects Agency Network, ARPANET). W latach 80-tych XX wieku niektóre wersje TCP/IP zostały zaadaptowane przez IBM, AT&T, oraz inne spółki. W 1989 Uniwersytet Kalifornijski, Berkeley, umieścił kod TCP/IP wytworzony dla BSD Unix w domenie publicznej.
Opracowanie samego HTTP zostało zapoczątkowane przez Sir Tim Berners-Lee w CERN w 1989 roku z wersją 0.9. Zbiegło się z opracowaniem HTML, czyli Hipertekstowego Język Znaczników (ang. HyperText Markup Language)
Pierwszy serwer HTTP zaczął działać w 1990 roku.
Wersje HTTP
HTTP/0.9 (HTTP wersja 0.9), który był pierwszą wersją HTTP, miał tylko metodę GET, która mogła tylko pobierać dokuemnty. HTTP/0.9 jest obecnie uważany za wygasły.
HTTP/1 został sfinalizowany w 1996 roku. Dodał metody HEAD oraz POST. W HTTP/1 oddzielne połączenie musiało być inicjowane dla każdej wymiany zapytania i odpowiedzi. HTTP/1 jest obecnie uważany za wygasły.
HTTP/1.1 został wydany w 1997 roku. Dodał metody PUT, DELETE, CONNECT, OPTIONS oraz TRACE. W HTTP/1.1 jedno połączenie może być używane dla wielu wymian pytań i odpowiedzi. HTTP/1.1 wciąż jest używany obecnie.
HTTP/2 został wprowadzodzony w roku 2015. Bazuje, do pewnego stopnia, na binarnym protokole SPDY Google'a i zwiększa prędkość wymiany wiadomości, jednakże zachowuje ogólną kompatybilność z HTTP/1.1. Pomimo tego, że HTTP/2 nie wymaga szyfrowania, to główne przeglądarki przy wymianie wiadomości z użyciem HTTP/2 wymagają, co de facto je wymusza. HTTP/2 uważany jest obecnie za przeważający standard HTTP.
HTTP/3 jest obecnie w trakcie rozwoju. HTTP/3 ogólnie używa tych samych metod, kodów stanu, oraz pól, co HTTP/2. Głównym powodem stojącym za rozwojem HTTP/3 jest zwiększenie prędkości wymiany wiadomości. Jest to osiągane poprzez użycie nowego protokołu wartwy transportu (host-do-hosta) zwanego QUIC, bazującego na Protokole Datagramów Użytkownika (ang. User Datagram Protocol, UDP), zamiast Protokołu Sterowania Transmisją (ang. Transmission Control Protocol, TCP).
HTTPS, czyli Zabezpieczony Protokół Przesyłania Dokumentów Hipertekstowych (ang. Hypertext Transfer Protocol Secure) jest rozszerzeniem HTTP dostarczającym bezpieczną komunikację pomiędzy procesami poprzez użycie Zabezpieczenia Warstwy Transportu (ang. Transport Layer Security, TLS) lub, wcześniej, Zabezpieczonej Warstwy Gniazd (ang. Secure Sockets Layer, SSL).
Bezstanowość HTTP
HTTP jest bezstanowe (ang. stateless), co oznacza, że żaden poprzedni stan nie jest kiedykolwiek potrzebny dla wykonania wymiany wiadomości zapytania i odpowiedzi.
Powyższe nie oznacza, że żadne dane nie mogą być zachowane pomiędzy wymianami wiadomości. Mogą być. Dane mogą być zachowane pomiędzy wymianami wiadomości w formie plików HTTP cookies, które wysyłane są w odpowiedziach przez serwer, zachowywane przez klienta, i dołączane do kolejnych zapytań klienta.
Połączenia i porty
Zanim następuje wymiana wiadomości zapytania i odpowiedzi klient inicjuje połączenie z serwerem.
Powszechnie używanym portem dla niezaszyfrowanych połączeń jest 80, a dla zaszyfrowanych 443.