Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menambah Pengepala HTTP Tersuai, Seperti Keizinan, pada Sambungan Pelanggan WebSocket dalam JavaScript?

Bagaimanakah Saya Boleh Menambah Pengepala HTTP Tersuai, Seperti Keizinan, pada Sambungan Pelanggan WebSocket dalam JavaScript?

Patricia Arquette
Lepaskan: 2024-11-30 08:13:14
asal
644 orang telah melayarinya

How Can I Add Custom HTTP Headers, Such as Authorization, to a WebSocket Client Connection in JavaScript?

Pengepala HTTP dalam API Klien WebSocket

Gunakan mana-mana klien pengepala HTTP yang menyokong ciri ini untuk menyesuaikan pengepala HTTP Nampaknya mudah untuk menambah Pelanggan WebSocket, tetapi saya tidak dapat mencari cara untuk melakukan ini menggunakan API WebSocket platform rangkaian.

Adakah sesiapa tahu bagaimana untuk melaksanakannya?

var ws = new WebSocket("ws://example.com/service");
Salin selepas log masuk

Secara khusus, perlu boleh menghantar pengepala Kebenaran HTTP.

Dikemas kini

  • Jawapan ringkas: Tidak, hanya medan laluan dan protokol boleh ditentukan.
  • Jawapan panjang:

Tiada kaedah dalam JavaScript WebSockets API untuk menentukan pengepala tambahan yang akan dihantar oleh klien/pelayar. Laluan HTTP ("GET /xyz") dan pengepala protokol ("Sec-WebSocket-Protocol") boleh ditentukan dalam pembina WebSocket.

Pengepala Sec-WebSocket-Protocol (kadangkala dilanjutkan untuk digunakan dalam pengesahan khusus WebSocket) diperoleh daripada WebSocket Argumen kedua pilihan kepada pembina menjana:

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Salin selepas log masuk

Kod di atas menghasilkan pengepala berikut:

Sec-WebSocket-Protocol: protocol
Salin selepas log masuk

dan

Sec-WebSocket-Protocol: protocol1, protocol2
Salin selepas log masuk

melaksanakan WebSocket A common corak untuk pengesahan/kebenaran adalah untuk melaksanakan sistem tiket, di mana halaman yang mengehos klien WebSocket meminta tiket daripada pelayan, yang kemudiannya Tiket ini diluluskan semasa persediaan sambungan, sama ada dalam rentetan URL/pertanyaan, dalam medan protokol atau dengan menyatakannya sebagai mesej pertama selepas sambungan diwujudkan. Pelayan kemudiannya hanya akan membenarkan sambungan diteruskan jika tiket itu sah (wujud, belum digunakan, IP pelanggan yang dikodkan dalam padanan tiket, cap waktu dalam tiket adalah lebih baharu, dsb.). Berikut ialah ringkasan maklumat keselamatan WebSocket: https://devcenter.heroku.com/articles/websocket-security.

Pengesahan asas pernah menjadi pilihan, tetapi ini telah ditamatkan dan penyemak imbas moden tidak akan menghantar pengepala ini walaupun ia dinyatakan.

Maklumat Pengesahan Asas (ditamatkan - tidak lagi berfungsi):

Pengepala kebenaran ialah medan nama pengguna dan kata laluan (atau hanya nama pengguna) daripada URI WebSocket Dijana:

var ws = new WebSocket("ws://username:password@")
Salin selepas log masuk

Kod di atas dijana dengan base64 Kodkan pengepala berikut untuk rentetan "nama pengguna:kata laluan":

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Salin selepas log masuk

Pengesahan Asas telah diuji dalam Chrome 55 dan Firefox 50 dan mengesahkan bahawa maklumat Pengesahan Asas memang dirundingkan dengan pelayan (ini Mungkin tidak berfungsi di Safari).

Terima kasih kepada Dmitry Frank untuk jawapan pengesahan asas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Pengepala HTTP Tersuai, Seperti Keizinan, pada Sambungan Pelanggan WebSocket dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan