Адреса ws:// и wss:// и где живёт WebSocket

Разбираемся со схемами адресов ws:// и wss:// и где WebSocket стоит в стеке.

wss:// — схема защищённого WebSocket-соединения поверх TLS, аналог https:// для обычных страниц.

Две схемы адресов

У WebSocket свои схемы URL, параллельные HTTP:

HTTP-мирWebSocket-мирШифрование
http://ws://нет
https://wss://да (TLS)

Адрес выглядит так: wss://example.com/chat. Путь /chat — обычный URL-путь, по нему сервер понимает, к какому обработчику подключают клиента.

Порты

По умолчанию ws:// идёт на порт 80, а wss:// — на 443, ровно как HTTP и HTTPS. Поэтому WebSocket проходит через ту же сетевую инфраструктуру и не требует открывать экзотические порты на файрволе.

Как работает под капотом

WebSocket живёт на прикладном уровне, поверх TCP, рядом с HTTP:

Приложение:   ваш чат / игра
Протокол:     WebSocket   (поверх TCP)
Транспорт:    TCP          (надёжная доставка, порядок)
Сеть:         IP

Для wss:// между WebSocket и TCP добавляется слой TLS — шифрование. Важное следствие: wss:// не только защищает данные, но и не даёт прокси «заглянуть» внутрь и сломать рукопожатие — трафик для них непрозрачен. Поэтому на проде почти всегда используют именно wss://.

Связь со страницей

Браузеры запрещают «смешанный контент»: со страницы по https:// нельзя открыть незащищённый ws:// — только wss://. Это логично: бессмысленно шифровать страницу, оставляя её живой канал открытым.

Частые ошибки

  • Открывать ws:// со страницы по HTTPS. Браузер заблокирует как mixed content — нужен wss://.
  • Путать схему с путём. wss://host/chat: wss — схема, /chat — путь маршрутизации на сервере.
  • Думать, что wss:// требует отдельного порта. Он идёт на 443, как и HTTPS.

Итоги

  • ws:// — незащищённый WebSocket (порт 80), wss:// — поверх TLS (порт 443).
  • WebSocket — прикладной протокол поверх TCP, рядом с HTTP в стеке.
  • На проде используют wss://: и шифрование, и проходимость через прокси.
  • Со страницы по HTTPS открыть можно только wss://.
Проверьте себя
1. Чем wss:// отличается от ws://?
Awss работает только в Chrome
Bwss идёт поверх TLS (шифрование), как https
Cws быстрее за счёт UDP
Dwss не поддерживает бинарные данные
2. Со страницы, загруженной по https://, можно открыть:
Aтолько ws://
Bтолько wss://
Cи ws://, и wss://
Dни ws, ни wss