HTTP — протокол передачі даних, що використовується в комп'ютерних мережах. Назва скорочена від HyperText Transfer Protocol, протокол передачі гіпертекстових документів
HTTP належить до протоколів моделі OSI 7-го прикладного рівня.
Основним призначенням протоколу HTTP є передача вебсторінок (текстових файлів з розміткою HTML, зображення та застосунки), але за його допомогою успішно передаються й інші файли (в цьому плані HTTP складає конкуренцію більш складнішому FTP).
HTTP припускає, що клієнтська програма — веббраузер — здатна відображати гіпертекстові вебсторінки та файли інших типів у зручній для користувача формі. Для правильного відображення HTTP дозволяє клієнтові дізнатися мову та кодування символів вебсторінки, запитати версію сторінки з потрібною мовою чи в потрібному кодуванні, використовуючи позначення зі стандарту MIME.
Якщо в URL зі схемою http:// не вказаний порт, то за замовчуванням береться 80, (для схеми https — 443).
Структура протоколу Редагувати
HTTP — протокол прикладного рівня, схожими на нього є FTP та SMTP. Обмін повідомленнями йде за звичайною схемою «запит-відповідь». Для ідентифікації ресурсів HTTP використовує глобальні URI. На відміну від багатьох інших протоколів, HTTP не зберігає свого стану. Це означає відсутність збереження проміжного стану між парами «запит-відповідь». Компоненти, що використовують HTTP, можуть самостійно здійснювати збереження інформації про стан, пов'язаний з останніми запитами та відповідями. Браузер, котрий посилає запити, може відстежувати затримки відповідей. Сервер може зберігати IP-адреси та заголовки запитів останніх клієнтів. Проте, згідно з протоколом, клієнт та сервер не мають бути обізнаними з попередніми запитами та відповідями, у протоколі не передбачена внутрішня підтримка стану й він не ставить таких вимог до клієнта та сервера.
Кожен запит/відповідь складається з трьох частин:
- стартовий рядок;
- заголовки;
- тіло повідомлення, що містить дані запиту, запитаний ресурс або опис проблеми, якщо запит не виконано.
Обов'язковим мінімумом запиту є стартовий рядок. Починаючи з HTTP/1.1 обов'язковим став заголовок Host: (щоб розрізнити кілька доменів, які мають одну й ту ж IP-адресу).
Запит Редагувати
Стартові рядки розрізняються для запиту й відповіді. Рядок запиту виглядає так:
‹Метод› ‹URI› HTTP/‹Версія›
де ‹Метод› можливо:
Переважно використовуються методи GET і POST.
Відповідь сервера Редагувати
Перший рядок відповіді має такий вигляд:
HTTP/‹Версія› ‹Код статусу› ‹Опис статусу›
Коди статусу:
- 1хх — інформаційний: запит прийнятий, продовжуй процес.
- 2хх — успіх: дія була успішно передана, зрозуміла, та прийнята.
- 3хх — перенаправлення: наступні дії мають бути успішно виконані для реалізації запиту.
- 4хх — помилка клієнта: запит містить синтаксичні помилки або не може бути виконаний.
- 5хх — помилка сервера: сервер не зміг виконати правильно сформований запит.
Найбільш поширені статуси:
- 200 OK — запит виконано успішно.
- 301 Moved Permanently — ресурс переміщено.
- 403 Forbidden — доступ до запитаного ресурсу заборонений.
- 404 Not Found — ресурс не знайдений.
- 503 Service Unavailable — сервіс недоступний.
Заголовки Редагувати
Заголовки 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.1 200 OK Server: Apache Content-Language: uk Content-Type: text/html; charset=utf-8 Content-Length: 1234 (пустий рядок) (далі йде текст html-сторінки)
Важливо: HTTP-заголовок відокремлюється від повідомлення пустою стрічкою (послідовністю CRLF CRLF
). Довжина повідомлення в байтах вказується в параметрі Content-Length
.
В першій стрічці відповіді вказується протокол, код відповіді.
Кешування Редагувати
Цікавою особливістю мережевих програм є те, що найкраща швидкість роботи досягається, якщо не використовувати мережу. Тому її використання намагаються уникнути запам'ятовуванням попередніх запитів (вебкешуванням), зменшенням частоти запитів або взагалі відсутністю необхідності деяких запитів за допомогою переміщення обробника даних ближче до даних, які він обробляє (див. мобільний код[en]).
Цей розділ потребує доповнення. (січень 2017) |
HTTP/2 Редагувати
У лютому 2015 комітет IETF (Internet Engineering Task Force), що займається розвитком протоколів і архітектури Інтернет, надав специфікації HTTP/2.0 статус «пропозиції стандарту», а також приступив до формування окремих 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 узгоджуються за допомогою протоколу ALPN, при якому клієнт повідомляє список підтримуваних опцій, а сервер вибирає найоптимальніший для себе варіант;
- Забезпечення високого рівня сумісності з HTTP/1.1: збережені заголовки, схема URI, коди стану і методи (GET, POST тощо). Забезпечена можливість створення проксі для доступу клієнтів HTTP/1.1 до серверів HTTP/2.0;
- Можливість встановлення шифрованих (HTTPS) і не шифрованих з'єднань (HTTP). Шифрування здійснюється з використанням TLS 1.3 або новішої версії. Незважаючи на те, що специфікація дозволяє створення нешифрованих сполучень, розробники Firefox і Google Chrome мають намір забезпечити роботу HTTP/2.0 тільки поверх TLS;
- Підтримка технології Server push для передачі даних від сервера до клієнта (наприклад, коли сервер вважає, що після певного запиту обов'язково будуть затребувані інші дані, він може відправити ці дані не чекаючи фактичного запиту);
- Підтримка HTTP/2.0 на час пропозиції стандарту вже реалізована в браузерах
Google Chrome і Firefox, вони вже багато років підтримують цю технологію, і Apple додала підтримку в браузер Safari в 2014 році. В Internet Explorer 11 підтримка реалізована лише для Windows 10.
Великі мобільні браузери, в тому числі Android-браузер, Chrome для Android і iOS, а також Safari в iOS 8 і вище підтримують HTTP/2 для мобільного доступу до Інтернету.
Див. також Редагувати
Примітки Редагувати
- RFC 2616 Стандарт HTTP/1.1
- RFC 2818 HTTP Over TLS
- Fielding Roy. Architectural Styles and the Design of Network-based Software Architectures. — Каліфорнійський університет в Ірвайні, 2000. — 28 August. з джерела 19 лютого 2009. Процитовано 2009-02-20.
- . Архів оригіналу за 19 квітня 2015. Процитовано 1 травня 2015.
- . IEBlog. Архів оригіналу за 19 липня 2020. Процитовано 24 квітня 2018.
- Lardinois, Frederic (26 червня 2013). . TechCrunch. AOL. Архів оригіналу за 7 жовтня 2013. Процитовано 10 вересня 2013.
- Foley, Mary Jo (7 листопада 2013). . Архів оригіналу за 22 листопада 2014. Процитовано 7 листопада 2013.
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. (серпень 2019) |
Це незавершена стаття про Інтернет. Ви можете допомогти проєкту, виправивши або дописавши її. |