Socket.io-client: Websocketのみの追加ヘッダー

作成日 2020年04月21日  ·  7コメント  ·  ソース: socketio/socket.io-client

追加のヘッダーは現在、WebSocketのみの接続ではサポートされていません。 ドキュメントで、RFC6455は「それを尊重しない」とおっしゃいました。
22/10ページを見ると
https://tools.ietf.org/html/rfc6455#page -22

  1. オプションで、送信に使用されるものなど、他のヘッダーフィールド
    Cookieを使用するか、サーバーへの認証を要求します。 不明なヘッダー
    [RFC2616]に従って、フィールドは無視されます。

明らかにそれをサポートしていて、個人的にも非常に便利だと思います。 また、engine.ioが使用するwsライブラリとそれほど複雑ではありません。
サポートはありますか? ありがとう

question

最も参考になるコメント

やあみんな。
うまく行かなかった。
統合テストでテストしたところ、機能しませんでした。

全てのコメント7件

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

上記のソースコードを読むことで、次の方法でこれを機能させることができます。

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アドレスが使えないということですか?

@AvailCat提供した例はブラウザでは機能しないことに注意してください

@rotvr WebSocketトランスポートのみを使用する場合、WebSocket接続(および基盤となるTCP接続)はセッション全体を通して開いたままになるため、スティッキーセッションは必要ありません。

ポーリングトランスポートを使用する場合、最初のHTTPリクエストはCookie( io )を設定します。これはスティッキーセッションに使用できます。

詳細はこちら: https

参照: https

このページは役に立ちましたか?
0 / 5 - 0 評価