Aggiornato 2x
Risposta breve: No, è possibile specificare solo il campo percorso e protocollo.
Risposta più lunga:
Non esiste alcun metodo nell'API WebSocket JavaScript per specificare ulteriori intestazioni da inviare al client / browser. Il percorso HTTP ("GET / xyz") e l'intestazione del protocollo ("Sec-WebSocket-Protocol") possono essere specificati nel costruttore WebSocket.
L'intestazione Sec-WebSocket-Protocol (che a volte viene estesa per essere utilizzata nell'autenticazione specifica di websocket) viene generata dal secondo argomento facoltativo al costruttore WebSocket:
var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Quanto sopra risulta nelle seguenti intestazioni:
Sec-WebSocket-Protocol: protocol
e
Sec-WebSocket-Protocol: protocol1, protocol2
Un modello comune per ottenere l'autenticazione / autorizzazione WebSocket è l'implementazione di un sistema di ticketing in cui la pagina che ospita il client WebSocket richiede un ticket dal server e quindi passa questo ticket durante l'impostazione della connessione WebSocket nella stringa URL / query, nel campo protocollo, o richiesto come primo messaggio dopo aver stabilito la connessione. Il server consente quindi di continuare la connessione solo se il ticket è valido (esiste, non è già stato utilizzato, l'IP client codificato nelle corrispondenze dei ticket, il timestamp nel ticket è recente, ecc.). Ecco un riepilogo delle informazioni sulla sicurezza di WebSocket: https://devcenter.heroku.com/articles/websocket-security
L'autenticazione di base era in precedenza un'opzione, ma questo è stato deprecato e i browser moderni non inviano l'intestazione anche se è stata specificata.
Informazioni di base sull'autorizzazione (obsoleto) :
L'intestazione di autorizzazione viene generata dal campo nome utente e password (o solo nome utente) dell'URI WebSocket:
var ws = new WebSocket("ws://username:password@example.com")
Quanto sopra risulta nella seguente intestazione con la stringa "nomeutente: password" codificata base64:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Ho testato l'autent di base in Chrome 55 e Firefox 50 e verificato che le informazioni sull'autent di base siano effettivamente negoziate con il server (ciò potrebbe non funzionare in Safari).
Grazie a Dmitry Frank per la risposta autentica di base