HTTP — это протокол, позволяющий получать различные ресурсы, например HTML -документы.

Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.

Сообщения, отправленные клиентом, обычно веб-браузером, называются HTTP-запрос , а сообщения, отправленные сервером, называются HTTP-ответ.

HTTP as an application layer protocol, on top of TCP (transport layer) and IP (network layer) and below the presentation layer.

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

HTTP-запрос

Чтобы сформировать HTTP-запрос, необходимо составить стартовую строку, а также задать по крайней мере один заголовок — это заголовок Host, который является обязательным, и должен присутствовать в каждом запросе

IP-адрес необходимо передать в заголовке Host тк преобразование доменного имени в IP-адрес осуществляется на стороне клиента

Стартовая (начальная) строка запроса для HTTP 1.1 составляется по следующей схеме:
Метод URI HTTP/Версия

Например (такая стартовая строка может указывать на то, что запрашивается главная страница сайта):
GET / HTTP/1.1
Метод URI

A basic HTTP request Запросы содержат следующие элементы:

  • HTTP-метод, обычно глагол подобно GETPOST или существительное, как OPTIONS или HEAD, определяющее операцию, которую клиент хочет выполнить. Обычно, клиент хочет получить ресурс (используя GET) или передать значения HTML-формы (используя POST), хотя другие операции могут быть необходимы в других случаях.
  • Путь к ресурсу: URL ресурсы лишены элементов, которые очевидны из контекста, например без протокола (http://), домена (здесь developer.mozilla.org), или TCP порта (здесь 80).
  • Версию HTTP-протокола.
  • Заголовки (опционально), предоставляющие дополнительную информацию для сервера.
  • Или тело, для некоторых методов, таких как POST, которое содержит отправленный ресурс.

Для того, чтобы обратиться к веб-странице по определённому адресу (в данном случае путь к ресурсу — это «/»), нам следует отправить следующий запрос:

GET / HTTP/1.1
Host: alizar.habrahabr.ru

HTTP-ответ

Стартовая строка ответа имеет следующую структуру:
HTTP/Версия Код состояния Пояснение

Версия протокола здесь задаётся так же, как в запросе.

Ответы содержат следующие элементы:

  • Версию HTTP-протокола.
  • HTTP код состояния, сообщающий об успешности запроса или причине неудачи.
  • Сообщение состояния — краткое описание кода состояния.
  • HTTP заголовки, подобно заголовкам в запросах.
  • Опционально: тело, содержащее пересылаемый ресурс.

После стартовой строки следуют заголовки, а также тело ответа. Например:

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Sat, 08 Mar 2014 22:53:46 GMT
Content-Type: application/octet-stream
Content-Length: 7
Last-Modified: Sat, 08 Mar 2014 22:53:30 GMT
Connection: keep-alive
Accept-Ranges: bytes

Wisdom

GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru

Для чего нужны заголовки?

Подробнее: Заголовки HTTP

Заголовки HTTP позволяют клиенту и серверу отправлять дополнительную информацию с HTTP запросом или ответом.

HTTP-заголовки сопровождают обмен данными по протоколу HTTP. Они могут содержать описание данных и информацию, необходимую для взаимодействия между клиентом и сервером.

Что может быть в теле запроса?
  1. Тело запроса A basic HTTP request
  2. Тело ответа A basic HTTP request
Основные методы запроса? GET / POST / PUT / DELETE

Подробнее: Методы HTTP-запросов

HTTP определяет множество методов запроса, которые указывают, какое желаемое действие выполнится для данного ресурса.

  1. Метод GET запрашивает представление ресурса. Запросы с использованием этого метода могут только извлекать данные.
  2. POST используется для отправки сущностей к определённому ресурсу. Часто вызывает изменение состояния или какие-то побочные эффекты на сервере.
  3. PUT заменяет все текущие представления ресурса данными запроса.
  4. DELETE удаляет указанный ресурс.
Какие группы кодов ответов есть? Что означает коды ответов (200, 201, 204, 301, 302, 40х, 500)?

Подробнее: Коды ответа HTTP

Код ответа (состояния) HTTP показывает, был ли успешно выполнен определённый HTTP запрос. Коды сгруппированы в 5 классов:

  1. Информационные 100 - 199
  2. Успешные 200 - 299
  3. Перенаправления 300 - 399
  4. Клиентские ошибки 400 - 499
  5. Серверные ошибки 500 - 599

200 OK “Успешно”. Запрос успешно обработан. 201 Created “Создано”. Запрос успешно выполнен и в результате был создан ресурс. 204 No Content “Нет содержимого”. Нет содержимого для ответа на запрос, но заголовки ответа, которые могут быть полезны, присылаются. 301 Moved Permanently “Перемещён на постоянной основе”. Этот код ответа значит, что URI запрашиваемого ресурса был изменён. Возможно, новый URI будет предоставлен в ответе. 302 Found “Найдено”. Этот код ответа значит, что запрошенный ресурс временно изменён. Новые изменения в URI могут быть доступны в будущем. Таким образом, этот URI, должен быть использован клиентом в будущих запросах. 40x Клиентские 500 Серверные || Internal Server Error “Внутренняя ошибка сервера”. Сервер столкнулся с ситуацией, которую он не знает как обработать.


Назад