Wprowadzenie
Historia HTTP rozpoczyna się w 1991 roku. Wtedy to uznano, że potrzebny jest nowy protokół,przeznaczony specjalnie do przekazywania hipertekstu. Powstała wówczas pierwsza, prototypowaimplementacja protokołu, znana jako HTTP 0.9. Późniejsze wersje zachowują zgodność z HTTP 0.9.Podstawowe zasady działania protokołu opisane będą na przykładzie HTTP 0.9 - główne założeniaprojektowe są te same we wszystkich wersjach.
- Nawiązywanie połączenia
Klient, używając adresu serwera i numeru portu, tworzy polaczenie TCP/IP z serwerem.
Jesli numer portu nie jest podany, domyślnie używa się wartości 80.
Serwer akceptuje połączenie.
UWAGA: HTTP najczęściej implementowane jest nad TCP/IP, lecz nie jest to wymóg - HTTP moze pracowaćnad dowolnym protokołem, o ile jest on zorientowany strumieniowo.- Prośba /Request/
Klient wysyła prośbę - jest to linia znaków ASCII zakończona CR LF. Linia składa się ze słowa GET,spacji i względnego adresu dokumentu. Adres dokumentu musi być jednym słowem - w tym sensie, żenie może zawierać spacji.- Odpowiedź /Response/
Odpowiedzią jest komunikat w HTML-u /lub innym języku, wywodzącym sie z SGML-a/. Komunikatprzekazywany jest jako strumień znaków ASCII. Poszczególne linie oddzielane są znakami CR LF,przy czym CR jest opcjonalny - klient nie może zakładać, że zawsze znajdzie CR. Teoretycznielinie moga byc dowolnie dlugie, lecz zazwyczaj serwery ograniczaja je do 80 znakow /nie liczącCR i LF/.
Komunikat kończy zamknięcie połączenia przez serwer.
Błędy są podawane w języku naturalnym, w formacie HTML-a - klient może je wykryć tylko badajac treśćotrzymanego dokumentu.- Zakończenie połączenia
Połączenie TCP/IP jest zrywane przez serwer, kiedy już przekaże cały dokument.
Klient może wcześniej zerwać połączenie - serwer nie powinien w tej sytuacji odnotowywać błędu.
Zadania sa niezależne, a serwer nie przechowuje żadnych informacji dotyczących wcześniejszych połączeń.
Początek
Opis protokołu HTTP 1.0
...w dokumencie RFC zajął 60 stron, tutaj opiszę tylko kilka istotniejszych cech wersji 1.0.
- Nawiązywanie połączenia
Bez zmian w stosunku do wersji 0.9.
- Prośba /Request/
Request = Simple-Request | Full-Request Simple-Request = "GET" SP Request-URI CRLF Full-Request = Request-Line *( General-Header | Request-Header | Entity-Header ) CRLF [ Entity-Body ] Request-Line = Method SP Request-URI SP HTTP-Version CRLF Method = "GET" | "HEAD" | "POST" | extension-method extension-method = token
Simple-Request zapewnia zgodność z HTTP 0.9.
Full-Request daje wiele nowych możliwosci:Prośba klienta to ciąg znaków ASCII /może to być wiele linii/ zakończony linią pustą.Klient może w niej podawać rozmaite informacje usprawniające komunikację: akceptowaneformaty dokumentów, oprogramowanie, z jakiego korzysta itp. Jesli zawrze tam frazę:If-Modified-Since, oraz wybierze metodę GET, to bedzie to GET warunkowe -prośba o dokument, o ile byl on zmodyfikowany w ciagu okreslonego przedziału czasu.Pozwala to na zmniejszanie ruchu w sieci.
Metoda HEAD również sluży eliminacji zbędnego transferu danych. Pozwala ona na pobranie samegonagłówka żądanego dokumentu.
POST służy do przesyłania danych "w odwrotnym kierunku" - można w ten sposób wzbogacać istniejącezasoby w adnotacje, rozsyłać wiadomości do list dyskusyjnych itp.
Zbiór metod pozostawiono otwarty - można go rozszerzac.Odpowiedź /Response/
Response = Simple-Response | Full-Response Simple-Response = [ Entity-Body ] Full-Response = Status-Line ; Section 6.1 *( General-Header ; Section 4.3 | Response-Header ; Section 6.2 | Entity-Header ) ; Section 7.1 CRLF [ Entity-Body ] Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Odpowiedź również może być zgodna z HTTP 0.9 /Simple-Response/, alboobszerniejsza /Full-Response/. Ważne jest, ze klient wysyłającySimple-Request nigdy nie otrzyma Full-Rsponse; numer wersji odpowiedzinie moze przewyższać numeru wersji żądania.
Pierwsza linia pełnej odpowiedzi - Status-Line zawiera wersję protokołu,kod powrotu, oraz tekstowy opis tego kodu.
Pierwsza cyfra kodu powrotu określa klasęodpowiedzi:- 1xx: Informational - Nieużywane, zarezerwowane na przyszłość
- 2xx: Success - Akcja sie powiodła, żądanie zostało zrozumiane i zaakceptowane
- 3xx: Redirection - Muszą być podjęte jakieś dalsze czynności, aby uzyskać dobrą odpowiedź
- 4xx: Client Error - Prośba zawiera błąd /np składniowy/ lub nie może być spełniona
- 5xx: Server Error - Prośba jest OK; kłopot jest z serwerem
A dokładniej: Status-Code = "200" ; OK | "201" ; Created | "202" ; Accepted | "204" ; No Content | "301" ; Moved Permanently | "302" ; Moved Temporarily | "304" ; Not Modified | "400" ; Bad Request | "401" ; Unauthorized | "403" ; Forbidden | "404" ; Not Found | "500" ; Internal Server Error | "501" ; Not Implemented | "502" ; Bad Gateway | "503" ; Service Unavailable | extension-code
Po linii statusu następują dalsze informacje, takie jak typ serwera, lokalna data, rodzaj przekazywanych danych,długość danych itp.Ostatnią częścia odpowiedzi jest dokument w HTML-u /obecny tylko wtedy, gdy klient o niegopoprosił/.Zakończenie połączenia
Połączenie TCP/IP jest zrywane przez serwer, kiedy już przekaże cały dokument.
Początek
Przykłady
Polecenie telnet hostname 80 otworzyło połączenie HTTP.
HTTP 0.9
GET /index.html bez numeru wersji bylo Simple-Request,więc serwer odesłał nań Simple-Response, w całości w HTML-u.
HTTP 1.0
GET /index.html HTTP/1.0, a następnie pusta linia, bylo Full-Request, stąd teżFull-Response, zawierające numer protokołu, kod powrotu, dlugość i typ danych itd., a dopieropotem dokument HTML-owy.
Wyszukiwanie BEZ przeglądarki
Bez przeglądarki, korzystając bezpośrednio z HTTP można też zdalnie przeszukiwać sieć - trzeba tylko odpowiednio sformułować zapytanie: Search: "Almukantarat" na www.wp.pl
Wynik nie jest może wyjątkowo czytelny, ale za to uzyskuje się go błyskawicznie.Szersze omówienie technik poruszania się po Sieci tylko przy użyciu HTTP znajdujesię w jednym z artykułówpisma Webtechniques. Można też stamtąd pobrać kod programóww C, które uzywajac m.in.gniazd TCP/IP łączą się z serwerami www i komunikują się z nimi poprzez polecenia HTTP.
Początek
Odnośniki do materiałów źródłowych