Обновлено 2x
Краткий ответ: Нет, можно указать только путь и поле протокола.
Более длинный ответ:
В JavaScript API WebSockets отсутствует метод указания дополнительных заголовков для клиента / браузера для отправки.Путь HTTP («GET / xyz») и заголовок протокола («Sec-WebSocket-Protocol») могут быть указаны в конструкторе WebSocket.
Заголовок Sec-WebSocket-Protocol (который иногда расширяется доиспользуется в аутентификации, специфичной для websocket), генерируется из необязательного второго аргумента в конструкторе WebSocket:
var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Приведенные выше результаты приводят к следующим заголовкам:
Sec-WebSocket-Protocol: protocol
и
Sec-WebSocket-Protocol: protocol1, protocol2
Обычным способом достижения аутентификации / авторизации WebSocket является внедрение системы создания билетов, в которой страница, на которой размещается клиент WebSocket, запрашивает билет с сервера, а затем передает этот билет во время настройки соединения WebSocket либо в строке URL / запроса, либо вполе протокола или требуется в качестве первого сообщения после установления соединения.Затем сервер разрешает продолжение соединения только в том случае, если заявка действительна (существует, еще не использовалась, IP-адрес клиента закодирован в совпадениях с заявкой, отметка времени в заявке недавно и т. Д.).Вот сводка информации о безопасности WebSocket: https://devcenter.heroku.com/articles/websocket-security
Раньше обычная аутентификация была опцией, но она устарела, и современные браузеры не отправляют заголовок, даже если он указан.
Базовая информация об аутентификации (устарела) :
Заголовок авторизации создается из поля имени пользователя и пароля (или просто имени пользователя) URI WebSocket:
var ws = new WebSocket("ws://username:password@example.com")
Приведенный выше результат приводит к следующему заголовку со строкой «username: password» в кодировке base64:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Я проверил базовую авторизацию в Chrome 55 и Firefox 50 и проверил, что базовая информация аутентификациидействительно согласовывается с сервером (это может не работать в Safari).
Спасибо Дмитрию Франку за базовую аутентификацию ответ