HTTP - wiadomości
Protokół HTTP jest oparty na modelu architektury klient-serwer i bezstanowym protokole żądania / odpowiedzi, który działa na zasadzie wymiany komunikatów poprzez niezawodne połączenie TCP / IP.
„Klient” HTTP to program (przeglądarka internetowa lub inny klient), który nawiązuje połączenie z serwerem w celu wysłania jednego lub więcej komunikatów żądania HTTP. „Serwer” HTTP to program (zazwyczaj serwer WWW, taki jak Apache Web Server lub Internet Information Services IIS itp.), Który akceptuje połączenia w celu obsługi żądań HTTP poprzez wysyłanie komunikatów odpowiedzi HTTP.
HTTP wykorzystuje Uniform Resource Identifier (URI) do identyfikacji danego zasobu i ustanowienia połączenia. Po nawiązaniu połączeniaHTTP messagessą przekazywane w formacie podobnym do używanego przez pocztę internetową [RFC5322] i Multipurpose Internet Mail Extensions (MIME) [RFC2045]. Te wiadomości obejmująrequests od klienta do serwera i responses z serwera do klienta, który będzie miał następujący format:
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
Żądania HTTP i odpowiedzi HTTP używają ogólnego formatu wiadomości RFC 822 do przesyłania wymaganych danych. Ten ogólny format wiadomości składa się z następujących czterech elementów.
- A Start-line
- Zero or more header fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
W kolejnych sekcjach wyjaśnimy każdą z jednostek używanych w wiadomości HTTP.
Wiadomość Start-Line
Linia początkowa będzie miała następującą składnię ogólną:
start-line = Request-Line | Status-Line
Omówimy Request-Line i Status-Line podczas omawiania odpowiednio komunikatów HTTP Request i HTTP Response. Na razie zobaczmy przykłady linii startowej w przypadku zapytania i odpowiedzi:
GET /hello.htm HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)
Pola nagłówka
Pola nagłówka HTTP zawierają wymagane informacje o żądaniu lub odpowiedzi albo o obiekcie wysłanym w treści wiadomości. Istnieją cztery typy nagłówków wiadomości HTTP:
General-header: Te pola nagłówka mają ogólne zastosowanie zarówno do komunikatów z żądaniami, jak i odpowiedziami.
Request-header: Te pola nagłówka mają zastosowanie tylko do komunikatów z żądaniami.
Response-header: Te pola nagłówka mają zastosowanie tylko do komunikatów odpowiedzi.
Entity-header: Te pola nagłówka definiują metainformacje o treści jednostki lub, jeśli nie ma treści, o zasobie zidentyfikowanym przez żądanie.
Wszystkie wyżej wymienione nagłówki mają ten sam ogólny format, a każde pole nagłówka składa się z nazwy, po której następuje dwukropek (:) i wartość pola w następujący sposób:
message-header = field-name ":" [ field-value ]
Poniżej znajdują się przykłady różnych pól nagłówka:
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Treść wiadomości
Część treści wiadomości jest opcjonalna dla wiadomości HTTP, ale jeśli jest dostępna, jest używana do przenoszenia treści jednostki skojarzonej z żądaniem lub odpowiedzią. Jeśli skojarzona jest treść jednostki, to zwykleContent-Type i Content-Length linie nagłówków określają charakter powiązanej treści.
Treść wiadomości to ta, która zawiera rzeczywiste dane żądania HTTP (w tym dane formularza i przesłane itp.) Oraz dane odpowiedzi HTTP z serwera (w tym pliki, obrazy itp.). Poniżej przedstawiono prostą zawartość treści wiadomości:
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
W następnych dwóch rozdziałach zostaną wykorzystane opisane powyżej koncepcje w celu przygotowania żądań HTTP i odpowiedzi HTTP.