HTTP Протокол
HTTP (HyperText Transfer Protocol) — це протокол прикладного рівня для передачі гіпертексту, який використовується переважно для пересилання ресурсів у Всесвітній павутині (WWW). Він є основою всіх веб-комунікацій.
Як працює HTTP протокол?
Протокол HTTP функціонує за принципом "запит-відповідь" між клієнтом (наприклад, веб-браузером) та сервером. Клієнт відправляє запит до сервера, сервер обробляє запит і відповідає з відповідними даними (наприклад, HTML-сторінкою, зображенням та ін.)

- Клієнт створює HTTP-запит: Коли користувач вводить URL в браузері, він ініціює HTTP-запит від свого комп’ютера (клієнта) до сервера.
- Сервер обробляє запит: Сервер приймає запит, обробляє його, знаходить необхідний файл або виконує необхідні операції і готує HTTP-відповідь.
- Сервер надсилає відповідь: Відповідь включає стан HTTP (наприклад, 200 OK), заголовки і тіло з даними, які клієнт запросив.
Основні компоненти HTTP
Методи HTTP:
GET: Запитує ресурс, не змінюючи його.POST: Відправляє дані до сервера для створення або оновлення ресурсу.PUT: Завантажує змінений ресурс на сервер.DELETE: Видаляє ресурс.HEAD: Запитує заголовки, але не тіло ресурсу.OPTIONS: Запитує методи, які сервер підтримує для конкретного ресурсу.
URL (Uniform Resource Locator):

- URL — це адреса ресурсу, який клієнт хоче отримати. URL включає протокол (http:// або https://), домен, шлях до ресурсу і, можливо, параметри запиту.
HTTP-заголовки:
- Заголовки запиту: Включають інформацію про клієнтський запит, наприклад, тип вмісту (
Content-Type), інструмент запиту (User-Agent) та кешування (Cache-Control). - Заголовки відповіді: Включають статус запиту, тип вмісту, хедери кешування тощо.
- Заголовки запиту: Включають інформацію про клієнтський запит, наприклад, тип вмісту (
Тіло повідомлення:
- Тіло запиту: Може містити дані, які необхідно передати серверу (наприклад, дані форми в методі POST).
- Тіло відповіді: Вміст, який сервер повертає у відповідь на запит (наприклад, HTML-документ, JSON, XML, зображення або інші типи файлів).
Приклад HTTP-запиту та відповіді
HTTP-запит:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html
HTTP-відповідь:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents.</p>
</body>
</html>
HTTP/2 та HTTP/3
Оригінальний HTTP/1.1 протокол отримав кілька оновлень для поліпшення продуктивності та безпеки:
- HTTP/2: Представлено в 2015 році для підвищення ефективності мереж, включає мультиплексування, стиснення заголовків і пріоритетність завдань.
- HTTP/3: Базується на QUIC-протоколі (працює поверх UDP), ціллю якого є ще більше зменшення затримки і покращення стійкості до втрат пакетів, ніж у HTTP/2, який працює на основі TCP. ення затримки і покращення стійкості до втрат пакетів, ніж у HTTP/2, який працює на основі TCP.
HTTP/2
Основні нововведення HTTP/2:
- Мультиплексування:
- Дозволяє здійснювати декілька запитів одночасно через один TCP-з'єднання без блокування, що значно зменшує затримки.
- Стиснення заголовків (HPACK):
- Заголовки HTTP запитів і відповідей стиснуті, що зменшує обсяг переданих даних.
- Пріоритизація:
- Можливість пріоритизації запитів дозволяє клієнту повідомити сервер, які ресурси важливіші.
- Пуш-сповіщення зі сторони сервера:
- Дозволяє серверу відправляти попередньо кешовані ресурси до клієнта без спеціального запиту.
HTTP/3
Основні нововведення HTTP/3:
- Побудований на QUIC:
- QUIC (Quick UDP Internet Connections) замінює TCP на рівні транспортного протоколу, працюючи поверх UDP. Це допомагає уникати вад TCP, таких як блокування головного елементу.
- Менша затримка при встановленні з'єднання:
- Швидше встановлює з'єднання завдяки одноетапному встановленню.
- Покращена стійкість до втрат пакетів:
- Якщо один пакет загублено, тільки він потребує повторної передачі, а не весь потік.
Використання HTTP/2 та HTTP/3 на практиці
Для підтримки HTTP/2 або HTTP/3 з вашого сервера необхідно:
- Оновити серверне ПЗ: Використовуйте сучасніші веб-сервери, наприклад, Nginx, Apache або Caddy, які підтримують ці протоколи.
- Налаштувати HTTPS: Майже всі реалізації HTTP/2 і HTTP/3 вимагають SSL/TLS, тому важливо налаштувати ваш сервер для роботи з HTTPS.
- Персоналізація конфігурацій: В залежності від вашого випадку, можуть знадобитися додаткові налаштування серверу для оптимальної підтримки HTTP/2 або HTTP/3.
HTTP є фундаментальним протоколом для передачі даних в Інтернеті, забезпечуючи ефективну взаємодію між клієнтами та серверами. Покращення, введені в HTTP/2 та HTTP/3, значно зменшують затримки, підвищують пропускну здатність і надійність комунікацій, що забезпечує кращий користувацький досвід для веб-застосунків.
Відлагодження HTTP запитів
Дебагінг HTTP-запитів у консолі розробника Chrome є важливим навиком. Це можна зробити з використанням вкладки "Network" (Мережа), яка дозволяє переглядати і аналізувати всі HTTP-запити та відповіді, що відбуваються під час роботи веб-сторінки. Ось основні кроки для дебагінгу HTTP-запитів у консолі розробника Chrome:
Крок 1: Відкрити Консоль Розробника
- Відкрийте веб-браузер Google Chrome.
- Перейдіть до веб-сторінки, яку хочете дослідити.
- Натисніть правою кнопкою миші на сторінці і виберіть "Inspect" (Інспектувати), або використовуйте клавіатурні скорочення Ctrl+Shift+I (Windows/Linux) або Cmd+Option+I (Mac).
Крок 2: Перейти на Вкладку "Network"
- У консолі розробника перейдіть до вкладки "Network" (Мережа).
Крок 3: Оновити Сторінку
- Оновіть веб-сторінку (натисніть F5 або Ctrl+R). Ви побачите список всіх HTTP-запитів, які відправляються і отримуються браузером.
Крок 4: Аналізувати Запити
Фільтрація запитів: Ви можете використовувати фільтри для відбору конкретних типів запитів (наприклад, XHR, JS, CSS, Img тощо) або ввести конкретний термін у поле фільтра.
Перегляд деталей запиту:
- Клацніть на потрібний запит у списку.
- У вікні, що з'явиться, ви зможете переключатися між різними вкладками для більш детального огляду:
- Headers (Заголовки): Показує загальні заголовки запиту та відповіді.
- Payload/Request Parameters (Дані запиту/Параметри запиту): Показує дані, які були надіслані з запитом (тіло запиту, параметри URL тощо).
- Preview/Response (Попередній перегляд/Відповідь): Показує вміст відповіді сервера.
- Cookies: Показує кукі, надіслані з сервером або разом із запитом.
- Timing (Час): Показує детальний розподіл часу виконання запиту (наприклад, час DNS-пошуку, встановлення з'єднання, завантаження контенту тощо).

Крок 5: Використання Знімків (знімок запитів)
- Натисніть на значок "Stop Refresh" (Стоп/Оновити) (через червоне коло або двічі на значок перезапуску) у вкладці "Network", щоб припинити оновлення списку запитів, особливо на динамічних сторінках.
Крок 6: Копіювання Запитів
- Натисніть правою кнопкою миші на потрібному запиті та виберіть "Copy" > "Copy as cURL". Це дозволить вам отримати запит у форматі cURL, який можна використовувати в терміналі/консолі для повторення і тестування.
[!TIP] У статі можна детальніше ознайомитися як це робити в різних браузерах Edit and resend faulty network requests to debug them
Крок 7: Відображення Повідомлень Консолі, Викликаних Запитами
- Перейдіть на вкладку "Console" (Консоль) для перегляду будь-яких повідомлень, попереджень або помилок, які можуть стосуватися виконаних HTTP-запитів.
Додаткові Поради
Збереження HAR файлу
- Клацніть правою кнопкою миші на будь-якому місці у списку запитів в вкладці "Network".
- Виберіть "Save all as HAR with content". Це дозволить зберегти всі HTTP-запити та відповіді, зроблені браузером у форматі HAR (HTTP Archive).
Збережений HAR файл можна використовувати для подальшого аналізу за допомогою інших інструментів або надсилати його іншим розробникам або підтримці для вирішення проблем.
Розширені Можливості
- Breakpoints (Точки переривання) для XHR:
- Перейдіть на вкладку "Sources".
- Відкрийте підвкладку "XHR Breakpoints" у правій панелі.
- Натисніть "+", щоб додати новий breakpoint, коли відбувається XHR-запит. Це допоможе вам зупинити виконання скрипта саме в той момент, коли відбувається запит, і дослідити стан програми.
- Blocking Requests (Блокування запитів):
- У вкладці "Network", натисніть правою кнопкою миші на будь-якому запиті і виберіть "Block request URL". Це допоможе вам симулювати проблеми з мережею, блокуючи певні ресурси.
- Throttle Net Speed (Обмеження швидкості мережі):
- У вкладці "Network", натисніть на випадаюче меню "Online" в правому верхньому куті та виберіть різні рівні швидкості мережі (наприклад, "Slow 3G", "Fast 3G").
- Це допоможе вам бачити, як ваш веб-додаток працює в умовах різної швидкості інтернету, та відслідковувати затримки у завантаженні ресурсів.
- Persistent Logging (Постійний логінг):
- Щоб мати можливість переглядати історію мережевих запитів навіть після оновлення сторінки, увімкніть опцію "Preserve log" у вкладці "Network".
- Наступне Завантаження:
- Якщо вам потрібно експортувати налаштування і згодом їх завантажити, скористайтеся функцією "Import/Export" в меню налаштувань консолі.
- Cookies:
- У вкладці "Network", після вибору певного запиту перейдіть до вкладки "Cookies", щоб переглянути всі cookie, які були відправлені з сервера або разом із запитом.
- Це допоможе вам аналізувати і налагоджувати стан сесій, користувацькі властивості і інші функції, що залежать від cookie.
- WebSockets:
- Вкладка "Network" також дозволяє налагоджувати WebSocket-з'єднання. Всі повідомлення від WebSocket-з'єднань будуть відображені у списку запитів.
- Клацніть на WebSocket-запит, щоб переглянути потік повідомлень у реальному часі.
- У вкладці "Security" у консолі розробника можна перевірити інформацію про безпеку з'єднання, включаючи сертифікати SSL/TLS, статус безпеки та повідомлення про проблеми безпеки.
- Вкладка "Audit" (або "Lighthouse" в новіших версіях) дозволяє вам автоматично перевіряти продуктивність, доступність, найкращі практики та SEO вашого веб-додатку. Це допоможе виявити проблеми з HTTP-запитами, що впливають на продуктивність сторінки (наприклад, занадто довге завантаження ресурсів або занадто багато запитів).

Використання інших інструментів
Існують також інструменти третьої сторони, які можуть інтегруватися з консолю розробника Chrome, для більш глибокого аналізу HTTP-запитів:
- Використовуйте Postman для відправлення, налагодження та тестування HTTP-запитів вручну. Ви навіть можете експортувати запити з Chrome як cURL команди і імпортувати їх в Postman.
- Використовуйте Fiddler для перехоплення та налагодження трафіку HTTP/HTTPS та більш комплексного аналізу запитів і відповідей.
- Wireshark є потужним інструментом для аналізу мережевого трафіку. Він дозволяє перехоплювати і вивчати дані на найглибшому рівні, що робить його ідеальним для складного налагодження та діагностики проблем мережі та HTML-запитів.
Висновки
Консоль розробника Chrome є дуже потужним інструментом для дебагінгу HTTP-запитів. Використовуючи різні функції цієї консолі, такі як вкладка "Network", фільтрація та аналіз запитів, збереження HAR-файлів, налаштування швидкості мережі, та інші, ви можете ефективно виявляти і вирішувати проблеми з HTTP-запитами.