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
- 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
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
Comentários muito úteis
Ei pessoal.
Não funcionou.
Acabei de testar em meus testes de integração, não funcionou.