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");
Secara khusus, perlu boleh menghantar pengepala Kebenaran HTTP.
Dikemas kini
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"]);
Kod di atas menghasilkan pengepala berikut:
Sec-WebSocket-Protocol: protocol
dan
Sec-WebSocket-Protocol: protocol1, protocol2
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@")
Kod di atas dijana dengan base64 Kodkan pengepala berikut untuk rentetan "nama pengguna:kata laluan":
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
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!