HTTP - сообщения

HTTP основан на модели клиент-серверной архитектуры и протоколе запросов / ответов без сохранения состояния, который работает посредством обмена сообщениями через надежное соединение TCP / IP.

HTTP-клиент - это программа (веб-браузер или любой другой клиент), которая устанавливает соединение с сервером с целью отправки одного или нескольких сообщений HTTP-запроса. HTTP-сервер - это программа (обычно веб-сервер, такой как Apache Web Server или IIS и т. Д.), Который принимает соединения для обслуживания HTTP-запросов путем отправки ответных HTTP-сообщений.

HTTP использует унифицированный идентификатор ресурса (URI), чтобы идентифицировать данный ресурс и установить соединение. Как только соединение установлено, сообщения HTTP передаются в формате, аналогичном тому, который используется почтой Интернета [RFC5322] и Многоцелевыми расширениями почты Интернета (MIME) [RFC2045]. Эти сообщения включают запросы от клиента к серверу и ответы от сервера клиенту, которые будут иметь следующий формат:

 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 Request и HTTP Response соответственно. А пока давайте посмотрим примеры строки запуска в случае запроса и ответа:

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: Эти поля заголовка имеют общую применимость как для сообщений запроса, так и для ответов.

  • Заголовок запроса: эти поля заголовка применимы только для сообщений запроса.

  • Заголовок ответа. Эти поля заголовка применимы только для ответных сообщений.

  • Заголовок объекта : Эти поля заголовка определяют метаинформацию о теле объекта или, если тело отсутствует, о ресурсе, идентифицированном запросом.

Все вышеупомянутые заголовки имеют одинаковый общий формат, и каждое поле заголовка состоит из имени, за которым следует двоеточие (:), и значения поля следующим образом:

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.