Подтвердить что ты не робот

Socket.io-client, как установить заголовок запроса при подключении

Я пытаюсь установить http-заголовок, когда клиент socket.io делает запрос на соединение. Есть ли способ сделать это?

Вот что я делаю:

// server side
var io = socketio(server);

io.use(function (socket, next) {
  // authorize using authorization header in socket.request.headers
});

// client side
var socket = io();  // i'm trying to set an authorization header in this http reqeust

Любые идеи? Спасибо.

4b9b3361

Ответ 2

Кажется, что клиент не поддерживает настройки заголовков, так как не все транспорты допускают настройку заголовков.

Этот пост от facundoolano описывает обходное решение для аутентификации, которое не требует размещения маркера auth в строке запроса.

Его обходной модуль можно найти в https://github.com/invisiblejs/socketio-auth.

Заставляет меня задаться вопросом, почему на серверной стороне socket.io разрешает доступ к заголовкам запроса...

Ответ 3

Начиная с версии 2.0.0/2017-01-22 engine.io-client поддерживает

[feature] Allow extraHeaders to be set for browser clients in XHR requests (#519)

Однако в этот момент сокет .io-клиент не обновляется для поддержки этой функции, поэтому пару дней может завершить эту сагу до тех пор, пока не будут использованы следующие инструкции: https://facundoolano.wordpress.com/2014/10/11/better-authentication-for-socket-io-no-query-strings/

Ответ 4

Эта информация устарела, поскольку socket.io 1.0

Существует два метода авторизации: global или namespace (think route). Глобальный метод устанавливается на сервере с помощью io.set('authorization', function (handshakeData, callback) вызова конфигурации.

Объект handshakeData содержит следующую информацию:

{
   headers: req.headers       // <Object> the headers of the request
 , time: (new Date) +''       // <String> date time of the connection
 , address: socket.address()  // <Object> remoteAddress and remotePort object
 , xdomain: !!headers.origin  // <Boolean> was it a cross domain request?
 , secure: socket.secure      // <Boolean> https connection
 , issued: +date              // <Number> EPOCH of when the handshake was created
 , url: request.url          // <String> the entrance path of the request
 , query: data.query          // <Object> the result of url.parse().query or a empty object
}

Вышеуказанная информация и более глубокое объяснение доступны на этой странице .