HTTP - Сообщения
HTTP основан на модели архитектуры клиент-сервер и протоколе запросов / ответов без сохранения состояния, который работает путем обмена сообщениями через надежное соединение TCP / IP.
HTTP-клиент - это программа (веб-браузер или любой другой клиент), которая устанавливает соединение с сервером с целью отправки одного или нескольких сообщений HTTP-запроса. HTTP-сервер - это программа (обычно это веб-сервер, такой как веб-сервер Apache или IIS Internet Information Services и т. Д.), Которая принимает соединения для обслуживания HTTP-запросов путем отправки сообщений HTTP-ответа.
HTTP использует унифицированный идентификатор ресурса (URI) для идентификации данного ресурса и установления соединения. Как только соединение установлено,HTTP messagesпередаются в формате, аналогичном формату, используемому почтой Интернета [RFC5322] и многоцелевым расширением электронной почты Интернета (MIME) [RFC2045]. Эти сообщения включаютrequests от клиента к серверу и responses от сервера к клиенту, который будет иметь следующий формат:
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
HTTP-запросы и HTTP-ответы используют общий формат сообщения RFC 822 для передачи необходимых данных. Этот общий формат сообщения состоит из следующих четырех элементов.
- 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
В следующих разделах мы объясним каждую из сущностей, используемых в сообщении HTTP.
Строка сообщения
Стартовая строка будет иметь следующий общий синтаксис:
start-line = Request-Line | Status-Line
Мы обсудим строку запроса и строку состояния при обсуждении сообщений HTTP-запроса и HTTP-ответа соответственно. А пока посмотрим на примеры начальной строки в случае запроса и ответа:
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)
Поля заголовка
Поля HTTP-заголовка предоставляют необходимую информацию о запросе или ответе или об объекте, отправленном в теле сообщения. Есть четыре типа заголовков HTTP-сообщений:
General-header: Эти поля заголовка применимы как для сообщений запроса, так и для сообщений ответа.
Request-header: Эти поля заголовка применимы только для сообщений запроса.
Response-header: Эти поля заголовка применимы только для ответных сообщений.
Entity-header: Эти поля заголовка определяют метаинформацию о теле объекта или, если тело отсутствует, о ресурсе, идентифицированном запросом.
Все вышеупомянутые заголовки следуют одному и тому же универсальному формату, и каждое поле заголовка состоит из имени, за которым следует двоеточие (:) и значение поля следующим образом:
message-header = field-name ":" [ field-value ]
Ниже приведены примеры различных полей заголовка:
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
Тело сообщения
Часть тела сообщения является необязательной для HTTP-сообщения, но если она доступна, она используется для переноса тела объекта, связанного с запросом или ответом. Если тело объекта связано, то обычноContent-Type и Content-Length строки заголовков определяют природу связанного тела.
Тело сообщения - это то, которое содержит фактические данные HTTP-запроса (включая данные формы, загруженные и т. Д.) И данные HTTP-ответа от сервера (включая файлы, изображения и т. Д.). Ниже показано простое содержимое тела сообщения:
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
В следующих двух главах описанные выше концепции будут использоваться для подготовки HTTP-запросов и HTTP-ответов.