Socket.io-client: EXTRA HEADER apenas com Websocket

Criado em 21 abr. 2020  ·  7Comentários  ·  Fonte: socketio/socket.io-client

Cabeçalho extra atualmente não é suportado com conexão apenas de websocket. Na documentação, você disse que o RFC 6455 não "honra isso".
Se você olhar na página 22/10
https://tools.ietf.org/html/rfc6455#page -22

  1. Opcionalmente, outros campos de cabeçalho, como aqueles usados ​​para enviar
    cookies ou solicitar autenticação a um servidor. Cabeçalho desconhecido
    campos são ignorados, de acordo com [RFC2616].

É evidente que o suporta e, pessoalmente, também o considero muito útil. Além disso, não é tão complicado com a biblioteca ws que o engine.io usa.
Qualquer suporte? Obrigado

question

Comentários muito úteis

Ei pessoal.
Não funcionou.
Acabei de testar em meus testes de integração, não funcionou.

Todos 7 comentários

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

Ao ler o código-fonte mencionado acima, você pode fazer isso funcionar:

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

E mesmo isso:

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

Com base nos trechos de código-fonte realmente parece que não há restrição, mas você testou? Vou testá-lo mais tarde, quando tiver tempo, mas se funcionar, a documentação precisa de atualização, pois:

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

Com extraHeaders
Isso só funciona se o transporte de pesquisa estiver habilitado (que é o padrão). Cabeçalhos personalizados não serão anexados ao usar websocket como o transporte. Isso acontece porque o handshake WebSocket não honra cabeçalhos personalizados. (Para informações, consulte o protocolo RFC WebSocket)

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

Afirma o contrário ...

Ei pessoal.
Não funcionou.
Acabei de testar em meus testes de integração, não funcionou.

@najibghadri @behruzz Funciona para mim com o exemplo acima, e não coloque extreHeader na votação

Funciona para mim ao executar no nodejs, mas não funciona no Chrome. Isso não pode ser feito porque não é compatível com os navegadores api https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
Preciso que o cabeçalho do meu balanceador de carga entregue corretamente a solicitação ao servidor de soquete, mas acho que precisaremos de um mecanismo diferente

Parece que alguém acha que deveria funcionar, pois também de acordo com a documentação:

extraHeaders | {} | Cabeçalhos que serão passados ​​para cada solicitação ao servidor (via xhr-polling e via websockets). Esses valores podem ser usados ​​durante o handshake ou para proxies especiais.

A propósito, se você não pode usar cookies, isso basicamente significa que você só pode usar endereços IP para balanceamento fixo?

@AvailCat , observe que os exemplos fornecidos não funcionarão no navegador

@rotvr se você usar apenas o transporte WebSocket, não precisará da sessão

Se você usar o transporte de pesquisa, a primeira solicitação HTTP define um cookie ( io ), que pode ser usado para sessão pegajosa.

Mais informações aqui: https://socket.io/docs/using-multiple-nodes/

Veja também: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082

Esta página foi útil?
0 / 5 - 0 avaliações