Socket.io-client: EXTRA HEADER nur mit Websocket

Erstellt am 21. Apr. 2020  ·  7Kommentare  ·  Quelle: socketio/socket.io-client

Zusätzlicher Header wird derzeit nicht mit einer Nur-Websocket-Verbindung unterstützt. In der Dokumentation haben Sie gesagt, dass der RFC 6455 ihn nicht "ehrt".
Wenn Sie auf Seite 22/10 schauen
https://tools.ietf.org/html/rfc6455#page -22

  1. Optional können andere Header-Felder verwendet werden, z. B. die zum Senden verwendeten
    Cookies oder Authentifizierung bei einem Server anfordern. Unbekannter Header
    Felder werden gemäß [RFC2616] ignoriert.

Es unterstützt es eindeutig und ich persönlich finde es auch sehr nützlich. Es ist auch nicht so kompliziert mit der ws-Bibliothek, die engine.io verwendet.
Unterstützung? Vielen Dank

question

Hilfreichster Kommentar

Hallo Leute.
Es hat nicht funktioniert.
Ich habe es gerade in meinen Integrationstests getestet, hat nicht funktioniert.

Alle 7 Kommentare

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

Durch Lesen des oben genannten Quellcodes können Sie Folgendes erreichen:

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

Und auch das:

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

Basierend auf den Quellcode-Snippets sieht es zwar so aus, als gäbe es keine Einschränkung, aber haben Sie es getestet? Ich werde es später testen, wenn ich Zeit habe, aber wenn es funktioniert, muss die Dokumentation aktualisiert werden, da:

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

Mit extraHeaders
Dies funktioniert nur, wenn der Abfragetransport aktiviert ist (dies ist die Standardeinstellung). Benutzerdefinierte Header werden nicht angehängt, wenn Websocket als Transport verwendet wird. Dies liegt daran, dass der WebSocket-Handshake keine benutzerdefinierten Header berücksichtigt. (Hintergrundinformationen finden Sie im WebSocket-Protokoll RFC.)

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

Es heißt anders ...

Hallo Leute.
Es hat nicht funktioniert.
Ich habe es gerade in meinen Integrationstests getestet, hat nicht funktioniert.

@najibghadri @behruzz Es funktioniert für mich mit dem obigen Beispiel und setzt extreHeader nicht unter Polling

Es funktioniert für mich, wenn es in NodeJS ausgeführt wird, nicht, wenn es in Chrome ausgeführt wird. Dies ist nicht möglich, da es von der Browser-API https://developer.mozilla.org/en-US/docs/Web/API/WebSocket nicht unterstützt wird
Ich benötige den Header für meinen Load Balancer, um die Anforderung korrekt an den Socket-Server zu senden, aber ich denke, wir benötigen einen anderen Mechanismus

Es scheint, dass jemand denkt, es sollte funktionieren, da auch laut Dokumentation:

extraHeaders | {} | Header, die für jede Anforderung an den Server übergeben werden (über xhr-polling und über Websockets). Diese Werte können dann während des Handshakes oder für spezielle Proxys verwendet werden.

Übrigens, wenn Sie keine Cookies verwenden können, bedeutet dies im Grunde, dass Sie nur IP-Adressen für den Sticky Balancing verwenden können?

@ AvailCat Bitte beachten Sie, dass die von Ihnen angegebenen Beispiele im Browser nicht funktionieren

@rotvr Wenn Sie nur den WebSocket-Transport verwenden, benötigen Sie keine Sticky-Sitzung, da die WebSocket-Verbindung (und die zugrunde liegende TCP-Verbindung) während der gesamten Sitzung geöffnet bleibt.

Wenn Sie den Abfragetransport verwenden, setzt die erste HTTP-Anforderung ein Cookie ( io ), das für Sticky-Sessions verwendet werden kann.

Weitere Informationen hier: https://socket.io/docs/using-multiple-nodes/

Siehe auch: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen