Güncelleme 2x
Kısa cevap: Hayır, yalnızca yol ve protokol alanı belirtilebilir.
Daha uzun cevap:
JavaScript WebSockets API'sında , istemcinin / tarayıcının göndereceği ek başlıkları belirtmek için herhangi bir yöntem yoktur . HTTP yolu ("GET / xyz") ve protokol başlığı ("Sec-WebSocket-Protocol") WebSocket yapıcısında belirtilebilir.
Sec-WebSocket-Protocol üstbilgisi (bazen websocket'a özgü kimlik doğrulamasında kullanılmak üzere genişletilir), isteğe bağlı ikinci bağımsız değişkenten WebSocket yapıcısına oluşturulur:
var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Yukarıdaki sonuçlar aşağıdaki başlıklarla sonuçlanır:
Sec-WebSocket-Protocol: protocol
ve
Sec-WebSocket-Protocol: protocol1, protocol2
WebSocket kimlik doğrulaması / yetkilendirmesi elde etmek için yaygın bir desen, WebSocket istemcisini barındıran sayfanın sunucudan bir bilet istediği ve daha sonra bu bileti WebSocket bağlantı kurulumu sırasında URL / sorgu dizesinde, protokol alanında geçirdiği bir biletleme sistemi uygulamaktır. veya bağlantı kurulduktan sonraki ilk mesaj olarak gereklidir. Bu durumda sunucu, bağlantının yalnızca bilet geçerliyse devam etmesine izin verir (var, henüz kullanılmamış, bilet maçlarında istemci IP'si kodlanmış, bilette zaman damgası yeni olmuşsa, vb.). WebSocket güvenlik bilgilerinin bir özeti: https://devcenter.heroku.com/articles/websocket-security
Temel kimlik doğrulama eskiden bir seçenekti, ancak bu kullanımdan kaldırılmıştır ve modern tarayıcılar, belirtilse bile üstbilgiyi göndermez.
Temel Yetkilendirme Bilgisi (Kullanımdan kaldırıldı) :
Yetkilendirme başlığı, WebSocket URI'sının kullanıcı adı ve şifre (veya yalnızca kullanıcı adı) alanından oluşturulur:
var ws = new WebSocket("ws://username:password@example.com")
Yukarıdaki sonuç, "kullanıcı adı: şifre" base64 kodlu dizeyle aşağıdaki üstbilgiyle sonuçlanır:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Chrome 55 ve Firefox 50'de temel yetkilendirmeyi test ettim ve temel yetkilendirme bilgilerinin gerçekten sunucu ile pazarlık edildiğini doğruladım (bu Safari'de çalışmayabilir).
Temel kimlik yanıtı için Dmitry Frank'a teşekkürler