Socket.io-client: ДОПОЛНИТЕЛЬНЫЙ ЗАГОЛОВОК только с Websocket

Созданный на 21 апр. 2020  ·  7Комментарии  ·  Источник: socketio/socket.io-client

Дополнительный заголовок в настоящее время не поддерживается при подключении только через веб-сокеты. В документации вы сказали, что RFC 6455 не "соблюдает его".
Если вы посмотрите на страницу 22/10
https://tools.ietf.org/html/rfc6455#page -22

  1. Необязательно, другие поля заголовка, например те, которые используются для отправки
    куки или запросить аутентификацию на сервере. Неизвестный заголовок
    поля игнорируются в соответствии с [RFC2616].

Ясно, что он поддерживает это, и я лично нахожу его очень полезным. Также это не так сложно с библиотекой ws, которую использует engine.io.
Любая поддержка? Спасибо

question

Самый полезный комментарий

Эй, ребята.
Это не работает.
Я только что протестировал в своих интеграционных тестах, не получилось.

Все 7 Комментарий

https://github.com/socketio/engine.io-client/blob/27fa6949f38896e18a6ef426516359f8d54e7db6/lib/socket.js#L124

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги