追加のヘッダーは現在、WebSocketのみの接続ではサポートされていません。 ドキュメントで、RFC6455は「それを尊重しない」とおっしゃいました。
22/10ページを見ると
https://tools.ietf.org/html/rfc6455#page -22
- オプションで、送信に使用されるものなど、他のヘッダーフィールド
Cookieを使用するか、サーバーへの認証を要求します。 不明なヘッダー
[RFC2616]に従って、フィールドは無視されます。
明らかにそれをサポートしていて、個人的にも非常に便利だと思います。 また、engine.ioが使用するwsライブラリとそれほど複雑ではありません。
サポートはありますか? ありがとう
https://github.com/socketio/engine.io-client/blob/master/lib/transports/websocket.js#L63
上記のソースコードを読むことで、次の方法でこれを機能させることができます。
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
transportOptions: {
websocket: {
extraHeaders: {
Cookie: 'It works',
},
},
},
});
そしてこれさえ:
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
extraHeaders: {
Cookie: 'It works',
},
});
ソースコードスニペットに基づくと、実際には制限がないように見えますが、テストしましたか? 後で時間があるときにテストしますが、機能する場合は、次の理由からドキュメントを更新する必要があります。
https://socket.io/docs/client-api/#With -extraHeaders:
extraHeaders付き
これは、ポーリングトランスポートが有効になっている場合にのみ機能します(これがデフォルトです)。 WebSocketをトランスポートとして使用する場合、カスタムヘッダーは追加されません。 これは、WebSocketハンドシェイクがカスタムヘッダーを尊重しないために発生します。 (背景については、WebSocketプロトコルRFCを参照してください)
const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});
それ以外の場合は...
やあみんな。
うまく行かなかった。
統合テストでテストしたところ、機能しませんでした。
@najibghadri @behruzz上記の例で機能し、 extreHeaderをポーリングしないで
nodejsで実行しているときは機能しますが、chromeで実行しているときは機能しません。 ブラウザAPIhttps : //developer.mozilla.org/en-US/docs/Web/API/WebSocketでサポートされていないため、これを行うことはできません
ロードバランサーがソケットサーバーにリクエストを正しく配信するためのヘッダーが必要ですが、別のメカニズムが必要になると思います
また、ドキュメントによると、誰かがそれが機能するはずだと思っているようです:
extraHeaders | {} | サーバーへのリクエストごとに渡されるヘッダー(xhr-pollingおよびwebsocketを介して)。 これらの値は、ハンドシェイク中または特別なプロキシに使用できます。
ちなみに、クッキーが使えないということは、基本的にはスティッキーバランシングにしかIPアドレスが使えないということですか?
最も参考になるコメント
やあみんな。
うまく行かなかった。
統合テストでテストしたところ、機能しませんでした。