Socket.io-client: EXTRA HEADER hanya dengan Websocket

Dibuat pada 21 Apr 2020  ·  7Komentar  ·  Sumber: socketio/socket.io-client

Header tambahan saat ini tidak didukung dengan koneksi hanya websocket. Dalam dokumentasi Anda mengatakan RFC 6455 tidak "menghormatinya".
Jika Anda melihat halaman 22/10
https://tools.ietf.org/html/rfc6455#page -22

  1. Secara opsional, bidang header lainnya, seperti yang digunakan untuk mengirim
    cookie atau meminta otentikasi ke server. Header tidak diketahui
    bidang diabaikan, sesuai [RFC2616].

Jelas itu mendukungnya, dan saya pribadi merasa sangat berguna juga. Juga tidak terlalu rumit dengan pustaka ws yang digunakan engine.io.
Ada dukungan? Terima kasih

question

Komentar yang paling membantu

Hai teman-teman.
Tidak bekerja.
Saya baru saja mengujinya dalam tes integrasi saya, tidak berhasil.

Semua 7 komentar

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

Dengan membaca kode sumber yang disebutkan di atas, Anda dapat membuatnya bekerja dengan:

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

Dan bahkan ini:

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

Berdasarkan cuplikan source code memang terlihat tidak ada batasan, namun sudahkah Anda mengujinya? Saya akan mengujinya nanti ketika saya punya waktu, tetapi jika berfungsi maka dokumentasinya perlu diperbarui, karena:

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

Dengan extraHeaders
Ini hanya berfungsi jika polling transport diaktifkan (yang merupakan default). Header kustom tidak akan ditambahkan saat menggunakan websocket sebagai transport. Ini terjadi karena handshake WebSocket tidak menerima header kustom. (Untuk latar belakang lihat protokol WebSocket RFC)

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

Ini menyatakan sebaliknya ...

Hai teman-teman.
Tidak bekerja.
Saya baru saja mengujinya dalam tes integrasi saya, tidak berhasil.

@najibghadri @behruzz Ini berfungsi untuk saya dengan contoh di atas, dan jangan letakkan extreHeader di bawah polling

Ini bekerja untuk saya saat dijalankan di nodejs, tidak saat dijalankan di chrome. Ini tidak dapat dilakukan karena tidak didukung oleh api browser https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
Saya membutuhkan tajuk untuk penyeimbang beban saya untuk mengirimkan permintaan dengan benar ke server soket, tetapi saya rasa kita memerlukan mekanisme yang berbeda

Tampaknya seseorang berpikir itu harus berfungsi, karena juga menurut dokumentasi:

extraHeaders | {} | Header yang akan diteruskan untuk setiap permintaan ke server (melalui xhr-polling dan melalui websockets). Nilai-nilai ini kemudian dapat digunakan selama jabat tangan atau untuk proxy khusus.

Ngomong-ngomong, jika Anda tidak dapat menggunakan cookie, apakah ini pada dasarnya berarti Anda hanya dapat menggunakan alamat IP untuk penyeimbangan permanen?

@AvailCat harap perhatikan bahwa contoh yang Anda berikan tidak akan berfungsi di browser

@rotvr jika Anda hanya menggunakan transport WebSocket, Anda tidak memerlukan sesi lengket, karena koneksi WebSocket (dan koneksi TCP yang mendasarinya) tetap terbuka selama seluruh sesi.

Jika Anda menggunakan transport polling, permintaan HTTP pertama menyetel cookie ( io ), yang dapat digunakan untuk sesi-lengket.

Informasi lebih lanjut di sini: https://socket.io/docs/using-multiple-nodes/

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat