Socket.io-client: ENCABEZADO EXTRA solo con Websocket

Creado en 21 abr. 2020  ·  7Comentarios  ·  Fuente: socketio/socket.io-client

Actualmente, el encabezado adicional no es compatible con la conexión de solo websocket. En la documentación, dijo que el RFC 6455 no lo "respeta".
Si miras la página 22/10
https://tools.ietf.org/html/rfc6455#page -22

  1. Opcionalmente, otros campos de encabezado, como los que se usan para enviar
    cookies o solicitar autenticación a un servidor. Encabezado desconocido
    los campos se ignoran, según [RFC2616].

Claramente lo soporta, y personalmente lo encuentro muy útil también. Además, no es tan complicado con la biblioteca ws que usa engine.io.
¿Algún apoyo? Gracias

question

Comentario más útil

Hola, chicos.
No funcionó.
Lo acabo de probar en mis pruebas de integración, no funcionó.

Todos 7 comentarios

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

Al leer el código fuente mencionado anteriormente, puede hacer que esto funcione de la siguiente manera:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  transportOptions: {
    websocket: {
      extraHeaders: {
        Cookie: 'It works',
      },
    },
  },
});

E incluso esto:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  extraHeaders: {
    Cookie: 'It works',
  },
});

Según los fragmentos de código fuente, parece que no hay restricciones, pero ¿lo probó? Lo probaré más tarde cuando tenga tiempo, pero si funciona, la documentación debe actualizarse, ya que:

https://socket.io/docs/client-api/#With -extraHeaders:

Con extraHeaders
Esto solo funciona si el transporte de sondeo está habilitado (que es el valor predeterminado). Los encabezados personalizados no se agregarán al usar websocket como transporte. Esto sucede porque el protocolo de enlace de WebSocket no respeta los encabezados personalizados. (Para más información, consulte el protocolo RFC de WebSocket)

const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});

Dice lo contrario ...

Hola, chicos.
No funcionó.
Lo acabo de probar en mis pruebas de integración, no funcionó.

@najibghadri @behruzz Me funciona con el ejemplo anterior, y no pongas extreHeader en la encuesta

Me funciona cuando se ejecuta en nodejs, no cuando se ejecuta en Chrome. Esto no se puede hacer ya que no es compatible con la API de los navegadores https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
Necesito el encabezado de mi equilibrador de carga para entregar correctamente la solicitud al servidor de socket, pero supongo que necesitaremos un mecanismo diferente

Parece que alguien piensa que debería funcionar, ya que también según la documentación:

extraHeaders | {} | Encabezados que se pasarán para cada solicitud al servidor (a través de xhr-polling y a través de websockets). Estos valores se pueden utilizar durante el protocolo de enlace o para proxies especiales.

Por cierto, si no puede usar cookies, ¿esto básicamente significa que solo puede usar direcciones IP para balanceo fijo?

@AvailCat tenga en cuenta que los ejemplos que proporcionó no funcionarán en el navegador

@rotvr si solo usa el transporte WebSocket, no necesita una sesión pegajosa, ya que la conexión WebSocket (y la conexión TCP subyacente) se mantiene abierta durante toda la sesión.

Si usa el transporte de sondeo, la primera solicitud HTTP establece una cookie ( io ), que se puede usar para sesiones permanentes.

Más información aquí: https://socket.io/docs/using-multiple-nodes/

Véase también: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082

¿Fue útil esta página
0 / 5 - 0 calificaciones