HTTP
| TCP/IP модель (RFC 1122) |
|---|
| Прикладний рівень |
| BGP · DHCP · DNS · FTP · Gopher · GTP · HTTP · IMAP · IRC · NNTP · NTP · POP3 · RIP · RPC · RTCP · RTP · RTSP · SDP · SIP · SMTP · SNMP · SOAP · SSH · STUN · Telnet · TLS/SSL · XMPP · |
| Транспортний рівень |
| TCP · UDP · DCCP · SCTP · RSVP · ECN · (більше) |
| Мережевий рівень |
| IP (IPv4, IPv6) · ICMP · ICMPv6 · IGMP · IPsec · (більше) |
| Рівень мережевих інтерфейсів |
| ARP · RARP · NDP · MPLS · OSPF · Tunnels (L2TP) · MAC-адреса (Ethernet, DSL, ISDN, FDDI) · Device Drivers · (більше) |
HTTP — протокол передачі даних, що використовується в комп'ютерних мережах. Назва скорочена від Hyper Text Transfer Protocol, протокол передачі гіпер-текстових документів
HTTP належить до протоколів моделі OSI 7-го прикладного рівня.
Основним призначенням протоколу HTTP є передача веб-сторінок (текстових файлів з розміткою HTML), хоча за допомогою нього успішно передаються і інші файли, які пов'язані з веб-сторінками (зображення і додатки), так і не пов'язані з ними (у цьому HTTP конкурує з складнішим FTP).
HTTP припускає, що клієнтська програма — веб-браузер — здатна відображати гіпертекстові веб-сторінки та файли інших типів у зручній для користувача формі. Для правильного відображення HTTP дозволяє клієнтові дізнатися мову та кодування веб-сторінки й/або запитати версію сторінки в потрібних мові/кодуванні, використовуючи позначення із стандарту MIME.
Зміст
Структура протоколу[ред. • ред. код]
HTTP — протокол прикладного рівня, схожими на нього є FTP і SMTP. Обмін повідомленнями йде за звичайною схемою «запит-відповідь». Для ідентифікації ресурсів 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
- Завантажує вказаний ресурс на сервер.
- 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 (далі йде текст запитаної сторінки)
Посилання[ред. • ред. код]
- RFC 2616 Стандарт HTTP/1.1