Table of Content

HTTP – це протокол прикладного рівня, що описує передачу даних у WEB. HTTP базується на технології клієнт-сервер в рамках якої між клієнтом та сервером здійснюється обмін повідомленнями. Повідомлення в HTTP поділяються на 2 види:

  1. Повідомлення запити (Request)
  2. Повідомлення відповіді (Response)

Клієнт ініціює з’єднання та надсилає повідомлення запит. Сервер обробляє запит, готує та надсилаєповідомлення відповідь, після чого або закриває з’єднання та утримує його відкритим в залежності від параметрів запиту.

Загальна структура повідомлення

Всі повідомлення в HTTP складаються з 3-ох основних елементів:

  1. Стартовий рядок
  2. Рядки заголовків
  3. Тіло

При цьому тіло відділяється від останнього заголовка порожнім рядком. В структурі повідомлення обов’язковим є лише стартовий рядок інші елементи є опціональні.

Повідомлення запит

Для повідомлення запиту стартовий рядок має наступний формат:

Метод_URI_HTTP/версія

  • Метод – це послідовність символів, що визначає основну операцію над опитуваним ресурсом.
  • URI – це унікальний ідентифікатор запитуваного ресурсу.
  • Версія – це пара цілих чисел розділених точкою, що позначає версію протокола HTTP. (наприклад 1.1)

Методи HTTP запитів

Назва методів HTTP запитів є чутливими до регістру і зазвичай являють собою короткі англійські слова заглавними літерами. Існує декілька різновидів методів проте далеко не всі з них можуть підтримуватись сервером взагалі, а зокрема для конкретних ресурсів. Методи можна поділити на 2 типи:

  1. Методи для реалізації CRUD операції з ресурсами (Create – Read – Update – Delete).
  2. Допоміжні операції пов’язані здебільшого з отриманням мета даних, що описують властивості ресурса та спосіб його отримання.

CRUD Методи

  1. GET (Read) – метод, що використовується для отримання вмісту заданого ресурсу. Зазначимо, що метод відноситься до розряду іденпотетних, що означає запит з одними і тими ж вхідними даними завжди буде приводити до одного ж результату. Додаткові параметри запиту вказуються як частина URI (query string). Існують 2 підвіди метода GET:
    1. Умовний GET, в запиті використовуються заголовки If – Xxx – Xxx. При використанні умовному GET вміст запитуваного ресурсу надсилається лише у разі виконання певної умови заданої заголовком. Основним призначення є зменшення навантаження на мережу, шляхом зайвої передачі даних.
    2. Частковий GET, використовується для отримання певного фрагменту ресурсу, а не ресурсу вцілому. Найбільш часто використовується для:
      1. докачування ресурсу з певного місця;
      2. отримання ресурсу великого об’єму частинами у паралельних потоках, що дозволяє скоротити час отримання ресурсу. Інформація про запитувальний фрагмент вказується за допомогою спеціального заголовка Range.
  2. POST (Update) – використовується для розміщення вмісту “повідомлення запиту” на сервері. Додаткові параметри можуть передаватись у тілі повідомлення. При цьому методі URI означає програмну компоненту, яка отримує дані з тіла повідомлення, обробляє та зберігає їх певним чином.
  3. PUT (Create)– використовується для розміщення даних, які містяться у тілі повідомлення в якості ресурса заданим в “стартовому рядку” URI. Головна відмінність методів PUT та POST у способі інтерпретації URI “стартового рядка” запиту. У випадку POST цей URI інтерпретується як URI програмної компоненти, яка обробляє отримані дані. А у випадку PUT, як URI який співставляється ресурсу утвореному на основі даних.
  4. DELETE (Delete) – метод, що використовується для вилучення ресурсу ідентифікованого заданого в URI.

Допоміжні методи HTTP запитів

Серед допоміжних методів відзначимо такі, хоча їх існує дещо більше:

  1. OPTION – метод використовується для отримання інформації про можливості сервера або параметри з’єднання. Зокрема за допомогою такого метода можна дізнатися про підтримуванні сервером методи запитів. Перелік цих методів сервер має включати в заголовок Allow відповіді.
  2. HEAD – метод є аналогічним методу GET, за виключення того, що відповідь не містить тіла. Очевидно, що метою використання є отримання мета даних з заголовків відповідей.
  3. TRACE – при надсиланні запиту цим методом у відповідь дублюється “повідомлення запит” з додавання змін внесених проміжними серверами в “повідомлення запит”. Зокрема, здебільшого проміжні сервера (проксі) можуть додати нові заголовки або дещо змінити вже наявні.

Повідомлення відповідь

Формат стартового рядка для повідомлення відповіді є наступним:

HTTP/версія_код-відповіді_текстове пояснення

  • HTTP/версія– аналогічний компоненту відповідному компоненту “стартового рядка повідомлення запиту”
  • Код відповіді – тризначне число, що задає статус відповіді. Всі коди відповідей поділяються на 5 класів, що позначаються першою цифрою коду. (відповідно від 1 до 5)
    1хх. Інформаційні коди
    • 100 Continue – відповідь означає про можливість продовження передачі даних
    • 102 Processing, що запит знаходиться в стадії обробки.
  • 2хх. Коди успіху.
    • 200 OK
    • 201 Created, означає, що було створено ресурс
    • 204 No Content, відповідь не містить вмісту.
    • 206 Partial Content, означає, що у тілі відповіді знаходиться частина ресурсу.
  • 3хх. Коди перенаправлення
    • 301 Moved Permanently, означає, що ресурс остаточно переміщений за інший URI.
    • 302 Moved Temporarily, означає, що ресурс тимчасово переміщений на інший URI.
    • 303 See Other, означає, що ресурс потрібно перепитати за іншим URI (у заголовку Location)
    • 304 Non Modified, означає, що ресурс не змінювався.
  • 4хх. Коди помилок клієнта
    • 400 Bad Request, сервер вважає запит некоректний
    • 401 Unauthorized, запит вимагає авторизації але авторизаційні дані не передані або передані не правильно.
    • 403 Forbidden, доступ до ресурсу забороненою
    • 404 Not Found
    • 405 Method Not Allowed
    • 408 Request Timeout
  • 5xx. Коди помилок сервера
    • 500 Internal Server Error, будь який збій у роботі сервера внаслідок помилок у алгоритми.
    • 501 Not Implemented, метод запиту до ресурсу не підтримується.

Текстове пояснення – короткий текст, що пояснює код відповіді.

Заголовки HTTP повідомлень (з 2 рядку до пустого)

Кожен заголовок займає окремий рядок та задається у форматі:

Ім'я:Значення

Ці заголовки поділяються на 4 категорії:

  1. General Headers– загальні заголовки містять загальну інформацію про заголовки.
  2. Request Headers – заголовки, що використовуються лише у “повідомленнях запиту”.
  3. Response Headers – заголовки, що використовуються лише у “повідомленнях відповідях”
  4. Entity Headers – заголовки сутності, що характеризують окрему сутності.

Приклади заголовків різних категорій

Загальні заголовки (General Headers)

  1. Connection – описує параметри з’єднання. Варіанти значення (close – з’єднання має бути закритим після надсилання, keep-alive – з’єднання має утримуватись)
  2. Date – дата та час формування повідомлення.
  3. Cache-Control – містить інформацію щодо управління механізмами кешування.
  4. Transfer-Encoding – інформація про алгоритми перетворення повідомлення вцілому.

Заголовки запиту (міститься інформація, що описує параметри очікуваної відповіді.)

1.Accept, перелік типів повідомлень, що сприймаються клієнтом

  1. Accept-Encoding – інформація про механізм перетворення який сприймає клієнт
  2. Accept Language – мовна реалізація, що сприймається клієнтом.
  3. Accept Charser – кодова сторінка
  4. If-Modified-Since – використовується у умовних GET, значення заголовку є дата після якої ресурс має змінитись щоб у відповідь було надіслано його вміст.
  5. User - Agent – інформація про програмний

Заголовки відповіді

  1. Server, несе інформацію про сервер, що несе відповідь.
  2. Location, використовується у відповідяху вигляді повідомлень направлень.

Заголовки сутності

  1. Allow – перелік методів підтримуваних сервером
  2. Content-Length – містить довжину повідомлення
  3. Content-Type – описує тип вмісту повідомлення
  4. Content-Encoding – описує тип перетворення застосованої до вмісту.
  5. Content-Language – описує мовну локалізації контента.
  6. Last-Modified– вказує на дату та час останнього оновлення ресурсу.
Last modified: 11.05.2018

Author

Comments

Write a Reply or Comment

Your email address will not be published.