HTTP — протокол передачі даних, що використовується в комп'ютерних мережах. Назва скорочена від Hyper Text Transfer Protocol, протокол передачі гіпер-текстових документів. Подібними до HTTP є протоколи FTP і SMTP.
Основним призначенням протоколу HTTP є передача веб-сторінок, хоча за допомогою протоколу успішно передаються й інші файли, як пов'язані з веб-сторінками (зображення та аплікації), так і не пов'язані з ними.
HTTP припускає, що клієнтська програма — веб-браузер — здатна відображати гіпертекстові веб-сторінки та файли інших типів у зручній для користувача формі. Для правильного відображення HTTP дає можливість клієнтові дізнатися мову і кодування веб-сторінки.
Обмін повідомленнями йде по звичайній схемі «запит-відповідь». Для ідентифікації ресурсів HTTP використовує глобальні URI. На відміну від багатьох інших протоколів, HTTP не зберігає свого стану. Це означає відсутність збереження проміжного стану між парами «запит-відповідь». Компоненти, що використовують HTTP, можуть самостійно здійснювати збереження інформації про стан пов'язаний з останніми запитами і відповідями. Браузер, що посилає запити, може відстежувати затримки відповідей. Сервер може зберігати IP-адреси і заголовки запитів останніх клієнтів. Проте згідно протоколу клієнт та сервер не мають бути обізнаними про попередні запити і відповіді. У протоколі не передбачена внутрішня підтримка стану і він не пред'являє такі вимоги до клієнта та сервера.
Кожен запит/відповідь складається з трьох частин:
· стартовий рядок;
· заголовки;
- тіло повідомлення, що містить дані запиту, запитаний ресурс або опис проблеми, якщо запит не виконано.
Обов'язковим є стартовий рядок. Починаючи з HTTP/1.1 обов'язковим став заголовок Host: (щоб розрізнити кілька доменів, які мають одну і ту ж IP-адресу).
Стартові рядки розрізняються для запиту і відповіді. Рядок запиту виглядає так:
‹Метод› ‹URI› HTTP/‹Версія›
де ‹Метод› може набувати такі значення:
Метод
| Зміст
|
OPTIONS
| Повертає методи HTTP, які підтримуються сервером. Цей метод може служити для визначення можливостей веб-сервера
|
GET
| Запитує вміст вказаного ресурсу. Запитаний ресурс може приймати параметри (наприклад, пошукова система може приймати шуканий рядок як параметр). Параметри передаються у рядку URI. Наприклад: http://www.example.net/resource?param1=value1¶m2=value2 Згідно зі стандартом HTTP, запити типу GET вважаються ідемпотентними — багатократне повторення одного і того ж запиту GET повинне приводити до однакових результатів (за умови, що сам ресурс не змінився за час між запитами). Це дозволяє гешувати відповіді на запити GET.
|
HEAD
| Аналогічний методу GET, за винятком того, що у відповіді сервера відсутнє тіло. Це корисно для витягання мета-інформації, заданої в заголовках відповіді, без пересилання всього вмісту. Зокрема, клієнт чи проксі, перевіривши заголовок Last-Modified: (останній час модифікації), таким чином може переконатися, що сторінка на сервері не змінилася від часу попереднього запиту.
|
POST
| Передає призначені для користувача дані (наприклад, з HTML-форми) заданому ресурсу. Наприклад, у блогах відвідувачі зазвичай можуть вводити свої коментарі до записів в HTML-форму. Ці коментарі далі передаються серверу методом POST, і сервер поміщає їх на сторінку. При цьому передані дані (у прикладі з блогами — текст коментаря) включаються у тіло запиту. На відміну від методу GET, метод POST не вважається ідемпотентним, тобто багатократне повторення одних і тих же запитів POST може повертати різні результати (наприклад, після кожного відправлення коментаря з'являтиметься одна копія цього коментаря).
|
PUT
| Завантажує вказаний ресурс на сервер.
|
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: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Connection: close