Этот материал — часть цикла “Введение в Enterprise-разработку”. Предыдущие статьи:
Привет! Сегодня мы будем разбираться в протоколах HTTP и HTTPS. Но для начала давай проясним один момент: речь идет о протоколах передачи данных по сети на прикладном уровне модели OSI. С моделью OSI, как ты помнишь, мы разбирались в одной из предыдущих статей. А если не помнишь — вот она.
![Часть 3. Протоколы HTTP/HTTPS - 1]()

Что такое протокол передачи данных
Так называют общепринятое соглашение, благодаря которому разработчики разных сервисов отправляют информацию в едином виде. Например, используя Google Chrome, ты можешь получить информацию и с Facebook, и с Twitter, потому что разработчики передают ее с помощью стандартного протокола HTTP, а твой браузер умеет его обрабатывать. Единые правила очень удобны и самим разработчикам серверных частей: существует очень много библиотек, которые могут за тебя преобразовать информацию и отправить по необходимому протоколу. Изначально HTTP задумывался как протокол передачи HTML-страниц. Долгое время так и было, но сейчас программисты частенько передают по нему и строки, и медиафайлы. В общем, этот протокол универсальный и гибкий, и использовать его действительно просто. А как это делать — сейчас разберемся.Структура HTTP
Сразу стоит отметить, что HTTP-протокол состоит только из текста. Ну а нас больше всего интересует структура, в которой расположен этот текст. Каждое сообщение состоит из трех частей:- Стартовая строка (Starting line) — определяет служебные данные.
- Заголовки (Headers) — описание параметров сообщения.
- Тело сообщения (Body) — данные сообщения. Должны отделяться от заголовков пустой строкой.
Как выглядит простой HTTP-запрос
GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
В стартовой строке указаны:
- GET — метод запроса;
- / — путь запроса (path);
- HTTP/1.1 — версия протокола передачи данных.
- Host — хост, которому адресован запрос;
- User-Agent — клиент, который отправляет запрос.
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com
{
"Id": 12345,
"User": "John"
}
Запрос отправляется по адресу javarush.com/user/create/json, версия протокола — HTTP/1.1. Accept указывает, какой формат ответа клиент ожидает получить, Content-Type — в каком формате отправляется тело сообщения. Content-Length — количество символов в теле.
HTTP-запрос может содержать много разных заголовков. Подробнее с ними можно ознакомиться в спецификации протокола.
HTTP-ответы
После получения запроса, сервер его обрабатывает и отправляет ответ клиенту:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
Стартовая строка в респонсе содержит версию протокола (HTTP/1.1), Код статуса (200), Описание статуса (OK). В заголовках — тип и длина контента. В теле ответа — HTML-код, который браузер прорисует в HTML-страницу.
Response Status Codes
С телом сообщения и заголовками все ясно, а о кодах статусов стоит сказать пару слов. Response Status Codes всегда трехзначные, и первая цифра кода указывает категорию ответа:- 1xx — информационный. Запрос получен, сервер готов к продолжению;
- 2xx — успешный. Запрос получен, понятен и обработан;
- 3xx — перенаправление. Следующие действия нужно выполнить для обработки запроса;
- 4xx — ошибка клиента. Запрос содержит ошибки или не отвечает протоколу;
- 5xx — ошибка сервера. Сервер не смог обработать запрос, хотя был составлен верно;
- 200 OK — реквест получен и успешно обработан;
- 201 Created — реквест получен и успешно обработан, в результате чего создан новый ресурс или его экземпляр;
- 301 Moved Permanently — запрашиваемый ресурс был перемещен навсегда, и последующие запросы к нему должны происходить по новому адресу;
- 307 Temporary Redirect — ресурс перемещен временно. Пока к нему можно обращаться, используя автоматическую переадресацию;
- 403 Forbidden — запрос понятен, но нужна авторизация;
- 404 Not Found — сервер не нашел ресурс по этому адресу;
- 501 Not Implemented — сервер не поддерживает функциональность для ответа на этот запрос;
- 505 HTTP Version Not Supported — сервер не поддерживает указанную версию HTTP-протокола.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ