HTTP і WebSocket обидва є протоколами зв’язку, які використовуються для зв’язку клієнт-сервер.
Протокол HTTP: HTTP є односпрямованим, коли клієнт надсилає запит, а сервер надсилає відповідь. Давайте візьмемо приклад, коли користувач надсилає запит на сервер, цей запит надходить у формі HTTP або HTTPS, після отримання запиту сервер надсилає відповідь клієнту, кожен запит пов’язується з відповідною відповіддю, після надсилання відповіді з’єднання закривається, кожен запит HTTP або HTTPS щоразу встановлює нове з’єднання з сервером, і після отримання відповіді з’єднання само собою припиняється.
HTTP — це протокол без збереження стану, який працює поверх TCP, який є протоколом, орієнтованим на з’єднання, він гарантує доставку пакетів даних за допомогою методів тристороннього встановлення зв’язку та повторно передає втрачені пакети.
HTTP може працювати поверх будь-якого надійного протоколу, орієнтованого на підключення, наприклад TCP, SCTP. Коли клієнт надсилає HTTP-запит на сервер, між клієнтом і сервером відкривається TCP-з’єднання, і після отримання відповіді TCP-з’єднання припиняється, кожен HTTP-запит відкриває окреме TCP-з’єднання з сервером, наприклад. якщо клієнт надішле 10 запитів на сервер, буде відкрито 10 окремих TCP-з’єднань. і закриваються після отримання відповіді/запасного варіанта.
Інформація HTTP-повідомлення, закодована в ASCII, кожне повідомлення HTTP-запиту складається з версії протоколу HTTP (HTTP/1.1, HTTP/2), методів HTTP (GET/POST тощо), заголовків HTTP (тип вмісту, довжина вмісту), інформації про хост тощо .і тіло, які містять фактичне повідомлення, яке передається на сервер. Розмір HTTP-заголовків варіюється від 200 байт до 2 КБ, звичайний розмір HTTP-заголовка становить 700-800 байт. Коли веб-програма використовує більше файлів cookie та інших інструментів на стороні клієнта, які розширюють можливості зберігання агента, це зменшує корисне навантаження заголовка HTTP.

WebSocket: WebSocket є двонаправленим, повнодуплексним протоколом, який використовується в тому самому сценарії зв’язку клієнт-сервер, на відміну від HTTP, він починається з ws:// або wss:// . Це протокол із збереженням стану, що означає, що з’єднання між клієнтом і сервером буде підтримуватися, доки його не буде розірвано однією зі сторін (клієнтом або сервером). Після закриття з’єднання клієнтом і сервером з’єднання припиняється з обох сторін.
чому рядок незмінний у java
Давайте візьмемо приклад зв’язку між клієнтом і сервером. Є клієнт, який є веб-браузером і сервером. Кожного разу, коли ми ініціюємо з’єднання між клієнтом і сервером, клієнт-сервер здійснює рукостискання та вирішує створити нове з’єднання, і це з’єднання залишатиметься живим, доки хтось із них не припинить роботу. Коли з’єднання встановлено та живе, зв’язок відбувається за тим самим каналом з’єднання, доки його не буде розірвано.
Таким чином після встановлення зв’язку клієнт-сервер клієнт-сервер вирішує нове з’єднання, щоб зберегти його, це нове з’єднання буде відоме як WebSocket. Після встановлення каналу зв’язку та відкриття з’єднання обмін повідомленнями відбуватиметься в двонаправленому режимі, доки не буде збережено з’єднання між клієнтом і сервером. Якщо будь-хто з них (клієнт-сервер) вмирає або вирішує закрити з’єднання, закривається обома сторонами. Спосіб роботи сокета дещо відрізняється від того, як працює HTTP, код статусу 101 позначає протокол комутації в WebSocket.

Коли можна використовувати веб-сокет:
- Веб-додаток у реальному часі: веб-додаток у реальному часі використовує веб-сокет для відображення даних на стороні клієнта, які постійно надсилаються внутрішнім сервером. У WebSocket дані безперервно надсилаються/передаються в те саме підключення, яке вже відкрито, тому WebSocket є швидшим і покращує продуктивність програми.
Для напр. на торговому веб-сайті або в торгівлі біткойнами, для відображення коливань ціни та даних про рух, які постійно надсилаються сервером до клієнта за допомогою каналу WebSocket.
Ігрова програма: в ігровій програмі ви можете зосередитися на тому, що дані постійно надходять на сервер, і без оновлення інтерфейсу користувача вони почнуть діяти на екрані, інтерфейс користувача оновлюється автоматично, навіть не встановлюючи нове з’єднання, тому це дуже корисно в ігровій програмі.
Програма чату: програми чату використовують WebSockets для встановлення з’єднання лише один раз для обміну, публікації та трансляції повідомлення серед підписників. Він повторно використовує те саме підключення WebSocket для надсилання та отримання повідомлення та для передачі повідомлення один на один.
Коли не можна використовувати WebSocket: WebSocket можна використовувати, якщо нам потрібні будь-які оновлені або безперервні потоки даних у реальному часі, які передаються через мережу. Якщо ми хочемо отримати старі дані або хочемо отримати дані лише один раз, щоб обробити їх за допомогою програми, яку нам слід використовувати протокол HTTP , старі дані, які не потрібні дуже часто або отримані лише один раз, можуть запитуватися за допомогою простого запиту HTTP, тому в цьому випадку краще не використовувати WebSocket.
Примітка: Веб-служб RESTful достатньо для отримання даних із сервера, якщо ми завантажуємо дані лише один раз.
Відмінності між підключенням HTTP і WebSocket:
| Підключення WebSocket | З'єднання HTTP |
|---|---|
| WebSocket — це протокол двонаправленого зв’язку, який може надсилати дані від клієнта до сервера або від сервера до клієнта, повторно використовуючи встановлений канал з’єднання. З’єднання підтримується до тих пір, поки не буде розірвано клієнтом або сервером. | Протокол HTTP — це односпрямований протокол, який працює поверх протоколу TCP, який є протоколом транспортного рівня, орієнтованого на з’єднання. Ми можемо створити з’єднання за допомогою методів запиту HTTP після отримання відповіді HTTP-з’єднання закривається. |
| Майже всі додатки в режимі реального часу, такі як (торгівля, моніторинг, сповіщення), використовують WebSocket для отримання даних по одному каналу зв’язку. | Проста програма RESTful використовує протокол HTTP, який не має стану. |
| Усі програми, які часто оновлюються, використовували WebSocket, оскільки він швидший за HTTP-з’єднання. | Коли ми не хочемо зберігати з’єднання певний час або повторно використовувати з’єднання для передачі даних; HTTP-з’єднання повільніше, ніж WebSockets. |
Примітка: Залежно від вашого проекту ви повинні вибрати, де це буде WebSocket або HTTP Connection.