Дополнительный заголовок в настоящее время не поддерживается при подключении только через веб-сокеты. В документации вы сказали, что RFC 6455 не "соблюдает его".
Если вы посмотрите на страницу 22/10
https://tools.ietf.org/html/rfc6455#page -22
- Необязательно, другие поля заголовка, например те, которые используются для отправки
куки или запросить аутентификацию на сервере. Неизвестный заголовок
поля игнорируются в соответствии с [RFC2616].
Ясно, что он поддерживает это, и я лично нахожу его очень полезным. Также это не так сложно с библиотекой ws, которую использует engine.io.
Любая поддержка? Спасибо
https://github.com/socketio/engine.io-client/blob/master/lib/transports/websocket.js#L63
Прочитав исходный код, упомянутый выше, вы можете выполнить эту работу следующим образом:
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
transportOptions: {
websocket: {
extraHeaders: {
Cookie: 'It works',
},
},
},
});
И даже это:
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
extraHeaders: {
Cookie: 'It works',
},
});
Судя по фрагментам исходного кода, действительно похоже, что ограничений нет, но вы это тестировали? Я собираюсь протестировать его позже, когда у меня будет время, но если он сработает, тогда документация нуждается в обновлении, поскольку:
https://socket.io/docs/client-api/#With -extraHeaders:
С extraHeaders
Это работает, только если включен протокол опроса (по умолчанию). Пользовательские заголовки не будут добавляться при использовании веб-сокета в качестве транспорта. Это происходит потому, что рукопожатие WebSocket не учитывает настраиваемые заголовки. (Для получения дополнительной информации см. Протокол WebSocket RFC)
const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});
В нем говорится иначе ...
Эй, ребята.
Это не работает.
Я только что протестировал в своих интеграционных тестах, не получилось.
@najibghadri @behruzz У меня это работает с приведенным выше примером, и не помещайте extreHeader в опрос
У меня это работает при запуске в nodejs, но не в Chrome. Это невозможно сделать, так как это не поддерживается api браузеров https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.
Мне нужен заголовок для моего балансировщика нагрузки, чтобы правильно доставить запрос на сервер сокетов, но я предполагаю, что нам понадобится другой механизм.
Кажется, что кто-то думает, что это должно работать, поскольку также согласно документации:
extraHeaders | {} | Заголовки, которые будут передаваться для каждого запроса на сервер (через xhr-опрос и через веб-сокеты). Эти значения затем можно использовать во время рукопожатия или для специальных прокси.
Кстати, если вы не можете использовать файлы cookie, означает ли это, что вы можете использовать только IP-адреса для липкой балансировки?
@AvailCat, обратите внимание, что предоставленные вами примеры не будут работать в браузере.
@rotvr, если вы используете только транспорт WebSocket, вам не нужен липкий сеанс, поскольку соединение WebSocket (и базовое TCP-соединение) остается открытым в течение всего сеанса.
Если вы используете транспорт с опросом, первый HTTP-запрос устанавливает cookie ( io
), который можно использовать для липкого сеанса.
Дополнительная информация здесь: https://socket.io/docs/using-multiple-nodes/
См. Также: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082
Самый полезный комментарий
Эй, ребята.
Это не работает.
Я только что протестировал в своих интеграционных тестах, не получилось.