HTTP

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

HTTPпротокол передачі даних, що використовується в комп'ютерних мережах. Назва скорочена від Hyper Text Transfer Protocol, протокол передачі гіпер-текстових документів

HTTP належить до протоколів моделі OSI 7-го прикладного рівня.

Основним призначенням протоколу HTTP є передача веб-сторінок (текстових файлів з розміткою HTML), хоча за допомогою нього успішно передаються і інші файли, які пов'язані з веб-сторінками (зображення і застосунки), так і не пов'язані з ними (у цьому HTTP конкурує з складнішим FTP).

HTTP припускає, що клієнтська програма — веб-браузер — здатна відображати гіпертекстові веб-сторінки та файли інших типів у зручній для користувача формі. Для правильного відображення HTTP дозволяє клієнтові дізнатися мову та кодування веб-сторінки й/або запитати версію сторінки в потрібних мові/кодуванні, використовуючи позначення із стандарту MIME.

Структура протоколу[ред.ред. код]

HTTP — протокол прикладного рівня, схожими на нього є FTP і SMTP. Обмін повідомленнями йде за звичайною схемою «запит-відповідь». Для ідентифікації ресурсів HTTP використовує глобальні URI. На відміну від багатьох інших протоколів, HTTP не зберігає свого стану. Це означає відсутність збереження проміжного стану між парами «запит-відповідь». Компоненти, що використовують HTTP, можуть самостійно здійснювати збереження інформації про стан, пов'язаний з останніми запитами та відповідями. Браузер, котрий посилає запити, може відстежувати затримки відповідей. Сервер може зберігати IP-адреси та заголовки запитів останніх клієнтів. Проте, згідно з протоколом, клієнт та сервер не мають бути обізнаними з попередніми запитами та відповідями, у протоколі не передбачена внутрішня підтримка стану й він не ставить таких вимог до клієнта та сервера.

Кожен запит/відповідь складається з трьох частин:

  1. стартовий рядок;
  2. заголовки;
  3. тіло повідомлення, що містить дані запиту, запитаний ресурс або опис проблеми, якщо запит не виконано.

Обов'язковим мінімумом запиту є стартовий рядок. Починаючи з HTTP/1.1 обов'язковим став заголовок Host: (щоб розрізнити кілька доменів, які мають одну й ту ж IP-адресу).

Запит[ред.ред. код]

Стартові рядки розрізняються для запиту й відповіді. Рядок запиту виглядає так:

‹Метод› ‹URI› HTTP/‹Версія›  

де ‹Метод› можливо:

OPTIONS
Повертає методи HTTP, які підтримуються сервером. Цей метод може служити для визначення можливостей веб-сервера.
GET
Запрошує вміст вказаного ресурсу. Запитаний ресурс може приймати параметри (наприклад, пошукова система може приймати як параметр шуканий рядок). Вони передаються в рядку URI (наприклад: http://www.example.net/resource?param1=value1&param2=value2). Згідно зі стандартом HTTP, запити типу GET вважаються ідемпотентними — багатократне повторення одного і того ж запиту GET повинне приводити до однакових результатів (за умови, що сам ресурс не змінився за час між запитами). Це дозволяє кешувати відповіді на запити GET.
HEAD
Аналогічний методу GET, за винятком того, що у відповіді сервера відсутнє тіло. Це корисно для витягання мета-інформації, заданої в заголовках відповіді, без пересилання всього вмісту. Зокрема, клієнт чи проксі, перевіривши заголовок Last-Modified: (останній час модифікації), таким чином може переконатися, що сторінка на сервері не змінилася від часу попереднього запиту.
POST
Передає призначені для користувача дані (наприклад, з HTML-форми) заданому ресурсу. Наприклад, в блогах відвідувачі зазвичай можуть вводити свої коментарі до записів в HTML-форму, після чого вони передаються серверу методом POST, і він поміщає їх на сторінку. При цьому передані дані (у прикладі з блогами — текст коментаря) включаються в тіло запиту. На відміну від методу GET, метод POST не вважається ідемпотентним, тобто багатократне повторення одних і тих же запитів POST може повертати різні результати (наприклад, після кожного відправлення коментаря з'являтиметься одна копія цього коментаря).
PUT
Завантажує вказаний ресурс на сервер.
PATCH
Завантажує певну частину ресурсу на сервер.
DELETE
Видаляє вказаний ресурс.
TRACE
Повертає отриманий запит так, що клієнт може побачити, що проміжні сервери додають або змінюють в запиті.
CONNECT
Для використання разом з проксі-серверами, які можуть динамічно перемикатися в тунельний режим SSL.

В основному використовуються методи GET і POST.

Відповідь сервера[ред.ред. код]

Перший рядок відповіді виглядає так:

HTTP/‹Версія› ‹Код статусу› ‹Опис статусу›

Найтиповіші статуси:

  • 200 OK — запит виконаний успішно;
  • 403 Forbidden — доступ до запитаного ресурсу заборонений;
  • 404 Not Found — запитаний ресурс не знайдений.

Заголовки[ред.ред. код]

Заголовки HTTP — це рядки, кожен з яких складається з імені параметра, за яким слідує двокрапка і його значення. Вони несуть інформацію для браузера або для серверних програм (таких, як CGI-застосунки). Між заголовками і тілом обов'язково повинен бути порожній рядок.

Приклад HTTP діалогу[ред.ред. код]

Запит[ред.ред. код]

GET /wiki/HTTP HTTP/1.1
Host: uk.wikipedia.org
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Connection: close

Відповідь[ред.ред. код]

HTTP/1.0 200 OK
Server: Apache
Content-Language: uk
Content-Type: text/html; charset=utf-8
Content-Length: 1234
(далі йде текст запитаної сторінки)

HTTP/2[ред.ред. код]

У лютому 2015 комітет IETF (Internet Engineering Task Force), що займається розвитком протоколів і архітектури Інтернет, надав специфікації HTTP/2.0 статус "пропозиції стандарту"[1], а також приступив до формування окремих RFC для протоколу HTTP/2.0 і формату стиснення заголовків HPACK.

Основним завданням створення HTTP/2.0 є підвищення ефективності використання мережевих ресурсів і зниження затримок при з'єднанні і обміні даними між клієнтом і сервером в умовах сучасних реалій, при яких для завантаження сайту потрібно відправити безліч окремих запитів (у середньому близько 100), пов'язаних з отриманням CSS, файлів JavaScript і картинок. Протокол HTTP/1.1, в силу блокувань при конвеєрній передачі даних і високих накладних витрат на віддачу ресурсів невеликого розміру, не може забезпечити належну ефективність і змушує встановлювати кілька одночасних TCP-з'єднань до сервера. В основу HTTP/2.0 покладений протокол SPDY, розроблений компанією Google — він дозволяє прискорити завантаження сайтів на 15-50%.

Основні особливості (PDF) HTTP/2.0:

  • Застосування бінарного протоколу, що оперує передачею бінарних кадрів. Кожен кадр має заголовок з інформацією про тип, розмір, опції та ідентифікаторі потоку. Кадри з типом DATA використовуються для передачі даних, HEADERS — HTTP-заголовків, RST_STREAM — для дострокового переривання відправлення даних;
  • Мультиплексування і розпаралелювання потоків в рамках одного TCP-з'єднання. Пакети різних потоків змішуються і, на відміну від конвеєрної передачі HTTP/1.1, не очікують закінчення відправлення запиту. Підтримка ефективної двобічної передачі даних. Можливість мультиплексування при зверненні до різних хостів, що дозволяє додатково прискорити одночасне завантаження веб-контенту з різних сайтів (у SPDY мультиплексування підтримується тільки для одного хоста);
  • Можливість установки пріоритетів і залежностей для потоків, що дозволяє виділити найважливіші потоки, які потрібно виконати в першу чергу, а також визначити залежність одного потоку від іншого;
  • Стиснення HTTP-заголовків. У тому числі підтримується усунення дублікатів заголовків і Cookie, повторюваних для серії запитів до одного сайту. Допускається визначення окремих заголовків що не підлягають стисненню;
  • Низька чутливість до затримок;
  • Засоби для узгодження протоколу між клієнтом і сервером, що дозволяють вибрати HTTP/1.1, HTTP/2.0 і інші протоколи: сервер надає список підтримуваних протоколів, які може вибрати клієнт. Для шифрованих з'єднань параметри TLS узгоджуються за допомогою протоколу APLN, при якому клієнт повідомляє список підтримуваних опцій, а сервер вибирає найоптимальніший для себе варіант;
  • Забезпечення високого рівня сумісності з HTTP/1.1: збережені заголовки, схема URI, коди стану і методи (GET, POST тощо). Забезпечена можливість створення проксі для доступу клієнтів HTTP/1.1 до серверів HTTP/2.0;
  • Можливість установки шифрованих (HTTPS) і не шифрованих з'єднань (HTTP). Шифрування здійснюється з використанням TLS 1.2 або новішої версії. Незважаючи на те, що специфікація допускає створення нешифрованих сполучень, розробники Firefox і Chrome мають намір забезпечити роботу HTTP/2.0 тільки поверх TLS;
  • Підтримка технології Server push для передачі даних від сервера до клієнта (наприклад, коли сервер вважає, що після певного запиту обов'язково будуть затребувані інші дані, він може відправити ці дані не чекаючи фактичного запиту);
  • Підтримка HTTP/2.0 на час пропозиції стандарту вже реалізована в браузерах Firefox 36+, Chrome (потрібна побудова з "--enable-spdy4") і IE 11. Серверні реалізації поки обмежуються OpenLiteSpeed​, H2O , nghttp2 і деякими бібліотеками на високорівневих мовах.

Посилання[ред.ред. код]

Дивіться також[ред.ред. код]

  • HTTPS — захищений шифруванням аналог HTTP.
  • Веб
  • FTP
  • URL