Websocket против объекта SockJS - PullRequest
       15

Websocket против объекта SockJS

0 голосов
/ 10 октября 2018

Мне интересно, почему вы можете инициализировать обычный веб-сокет javascript с помощью:

 var socket = new WebSocket('ws://example.com/myprefix')

Но с SockJS вам нужно вызвать нормальный URL-адрес http (s):

var sock = new SockJS('https://example.com/my_prefix');

Почему SockJS не разрешает "нормальные" URL-адреса ws?

1 Ответ

0 голосов
/ 10 октября 2018

Протокол веб-сокета, начинающийся с ws:, определен в RFC6455 .

В то время как будущие реализации протокола могут получить выделенные номера портов для безопасного и незащищенного трафика, на данный момент(2018) протокол инициируется созданием HTTP-запроса с заголовком обновления для изменения протокола на WS.(Ссылки 1 , 2 & 3 ).

Для использования веб-сокетов и ws протоколов требуется клиентская поддержка веб-сокетовAPI и серверная поддержка заголовка обновления протокола и обмена данными через веб-сокеты.

SockJS напоминает заполнение веб-сокетов, которое откатится к доступным каналам связи, если веб-сокеты недоступны.Согласно файлу readme.md,

"SockJS предназначен для работы во всех современных браузерах и в средах, не поддерживающих протокол WebSocket, например, за ограничивающими корпоративными прокси.

Для веб-сокетов и SockJS требуется поддержка на сервере. EG для узла: ws или SockJS для узла . Файл readme.md для SockJS указывает, что сервербудет принимать необработанные запросы, используя заголовок протокола ws:, но не будет указывать, на каком порту.

Если запрос на стороне клиента не принимает ws URL-адресов, я предлагаю предположить, что он был написан вокруг предположений о созданииначальный HTTP / HTTPS-запрос для определения поддержки. Возможно, запрос на обновление может расширить протоколы, принятые в URL!

...