Цей матеріал - частина циклу "Введення в Enterprise-розробку". Попередні статті:
Вітання! Сьогодні ми розбиратимемося в протоколах HTTP і HTTPS. Але для початку давай прояснимо один момент: йдеться про протоколи передачі даних по мережі на прикладному рівні моделі OSI. З моделлю OSI, як ти пам'ятаєш, ми розбиралися в одній із попередніх статей. А якщо не пам'ятаєш - ось вона .
Відразу варто зазначити, що протокол HTTP складається тільки з тексту. А нас найбільше цікавить структура, в якій розташований цей текст. Кожне повідомлення складається із трьох частин:
Що таке протокол передачі даних
Так називають загальноприйняту угоду, завдяки якій розробники різних сервісів надсилають інформацію в єдиному вигляді. Наприклад, використовуючи Google Chrome, ти можеш отримати інформацію з Facebook і Twitter, тому що розробники передають її за допомогою стандартного протоколу HTTP, а твій браузер вміє його обробляти. Єдині правила дуже зручні і самим розробникам серверних частин: існує дуже багато бібліотек, які можуть за тебе перетворити інформацію та надіслати за необхідним протоколом. Спочатку HTTP замислювався як протокол передачі HTML-сторінок. Довгий час так і було, але зараз програмісти часто передають по ньому і рядки, і медіафайли. Загалом цей протокол універсальний і гнучкий, і використовувати його дійсно просто. А як це робити – зараз розберемося.
Структура HTTP
Відразу варто зазначити, що протокол HTTP складається тільки з тексту. А нас найбільше цікавить структура, в якій розташований цей текст. Кожне повідомлення складається із трьох частин:
- Стартовий рядок (Starting line) – визначає службові дані.
- Заголовки (Headers) – опис параметрів повідомлення.
- Тіло повідомлення (Body) – дані повідомлення. Повинні відокремлюватися від заголовків порожнім рядком.
Як виглядає простий HTTP-запит
GET / HTTP/1.1
Host: codegym.cc
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: codegym.cc
{
"Id": 12345,
"User": "John"
}
Запит надсилається на адресау codegym.cc/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.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ