Cập nhật 2 lần
Câu trả lời ngắn: Không, chỉ có thể chỉ định trường đường dẫn và giao thức.
Câu trả lời dài hơn:
Không có phương pháp nào trong API WebSockets của JavaScript để chỉ định các tiêu đề bổ sung cho ứng dụng khách / trình duyệt gửi. Đường dẫn HTTP ("GET / xyz") và tiêu đề giao thức ("Sec-WebSocket-Protocol") có thể được chỉ định trong hàm tạo WebSocket.
Tiêu đề Sec-WebSocket-Protocol (đôi khi được mở rộng để sử dụng trong xác thực cụ thể của websocket) được tạo từ đối số thứ hai tùy chọn cho trình tạo WebSocket:
var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Các kết quả trên trong các tiêu đề sau:
Sec-WebSocket-Protocol: protocol
và
Sec-WebSocket-Protocol: protocol1, protocol2
Một mô hình phổ biến để đạt được xác thực / ủy quyền của WebSocket là triển khai hệ thống bán vé trong đó trang lưu trữ ứng dụng khách WebSocket yêu cầu một vé từ máy chủ và sau đó chuyển vé này trong khi thiết lập kết nối WebSocket trong chuỗi URL / truy vấn, trong trường giao thức, hoặc được yêu cầu như là tin nhắn đầu tiên sau khi kết nối được thiết lập. Sau đó, máy chủ chỉ cho phép kết nối tiếp tục nếu vé hợp lệ (tồn tại, chưa được sử dụng, IP của khách hàng được mã hóa trong các trận đấu vé, dấu thời gian trong vé gần đây, v.v.). Dưới đây là bản tóm tắt thông tin bảo mật WebSocket: https://devcenter.heroku.com/articles/websocket-securance
Xác thực cơ bản trước đây là một tùy chọn nhưng điều này đã không được chấp nhận và các trình duyệt hiện đại không gửi tiêu đề ngay cả khi được chỉ định.
Thông tin xác thực cơ bản (không dùng nữa) :
Tiêu đề ủy quyền được tạo từ trường tên người dùng và mật khẩu (hoặc chỉ tên người dùng) của URI WebSocket:
var ws = new WebSocket("ws://username:password@example.com")
Các kết quả trên trong tiêu đề sau với chuỗi "username: password" base64 được mã hóa:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Tôi đã thử nghiệm auth cơ bản trong Chrome 55 và Firefox 50 và xác minh rằng thông tin xác thực cơ bản thực sự được thương lượng với máy chủ (điều này có thể không hoạt động trong Safari).
Cảm ơn Dmitry Frank cho câu trả lời xác thực cơ bản