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-ответов.