encyklopedia.run.place

WebSocket

WebSocket – dwukierunkowy protokół komunikacji w warstwie aplikacji, działający na bazie protokołu TCP. Został opracowany w ramach standardu HTML5 i umożliwia utrzymanie stałego, pełno-dupleksowego połączenia pomiędzy przeglądarką internetową a serwerem, co pozwala na wymianę danych w czasie rzeczywistym przy minimalnym narzucie protokołowym.

Historia

Idea stałego połączenia przeglądarka‑serwer istniała już w latach 1999 w postaci technologii takich jak Comet czy Long Polling. Formalna specyfikacja WebSocket została przyjęta przez IETF w dokumencie RFC 6455 w 2011 roku, a wsparcie w przeglądarkach pojawiło się w latach 20122014.

Podstawy techniczne

Protokół i handshake

Połączenie rozpoczyna się od klasycznego żądania HTTP GET z nagłówkiem Upgrade: websocket. Serwer odpowiada kodem 101 Switching Protocols i po udanym handshake’u obie strony przechodzą na tryb binarny, w którym każdy komunikat jest otoczony ramką (frame) o minimalnym nagłówku.

Struktura ramki

  • Bit FIN – oznacza koniec wiadomości.
  • Opcode – definiuje typ danych (tekst, binaria, ping, pong, zamknięcie).
  • Mask – w przypadku wiadomości od klienta dane są maskowane (obowiązkowo), co zwiększa bezpieczeństwo.
  • Payload – właściwa treść przesyłana w ramce.

Warstwa transportowa

WebSocket działa na warstwie TCP, co zapewnia niezawodną, kolejnościową transmisję. Dzięki temu nie wymaga dodatkowych mechanizmów retransmisji, które są niezbędne w protokołach bezpołączeniowych, takich jak UDP.

Zastosowania

Technologia ta znajduje zastosowanie w wielu dziedzinach, m.in.:

  • czatów internetowych i komunikatorów w przeglądarce,
  • gier online w czasie rzeczywistym,
  • powiadomień push w aplikacjach webowych,
  • monitoringu systemów i dashboardów z danymi na żywo,
  • interaktywnych aplikacji IoT (Internet of Things).

Bezpieczeństwo

Podobnie jak w tradycyjnym HTTPS, połączenia WebSocket mogą być szyfrowane przy użyciu TLS (w trybie wss://). Najważniejsze zagrożenia obejmują:

  • Ataki XSS – niepoprawne walidowanie danych po stronie klienta.
  • Ataki typu CSRF – można je ograniczyć poprzez wymuszanie połączeń z nagłówkiem Origin.
  • Wstrzykiwanie niepożądanych ramek (frame injection) – wymaga weryfikacji i ograniczania rozmiaru payloadu.

Implementacje i biblioteki

Większość nowoczesnych przeglądarek (Chrome, Firefox, Safari, Edge) obsługuje natywnie API WebSocket w języku JavaScript:

let socket = new WebSocket('wss://example.com/socket');
socket.onopen = () => console.log('Połączono');
socket.onmessage = e => console.log('Odebrano:', e.data);
socket.send('Hello, server!');

Na serwerze dostępne są liczne biblioteki:

Porównanie z innymi technologiami

Cecha WebSocket HTTP/1.1 (Polling) HTTP/2 Server‑Sent Events (SSE) WebRTC DataChannel
Tryb komunikacji Dwukierunkowy, pełno‑dupleksowy Jednokierunkowy, wymaga wielokrotnego request/response Jednokierunkowy (serwer → klient) Dwukierunkowy, peer‑to‑peer
Nadmierny narzut ~2 B nagłówka + ramka Pełny nagłówek HTTP przy każdym zapytaniu Mini‑nagłówek SSE Składnia ICE, STUN/​TURN – większy narzut
Wsparcie w przeglądarkach Wszystkie współczesne Wszechobecne Wsparcie w większości Wymaga HTTPS i dodatkowej negocjacji

Patrz także

Bibliografia

  1. IETF, RFC 6455 – The WebSocket Protocol, 2011.
  2. W3C, HTML Living Standard – Section 7.4 WebSocket API, dostęp 2026‑07‑10.
  3. Mozilla Developer Network, WebSocket – MDN Web Docs, dostęp 2026‑07‑10.