Trong phần 1.3 "Mở Handshake" của draft-ietf-hybi-thewebsocketprotocol-17, nó mô tả Sec-WebSocket-Key
như sau:Sec-WebSocket-Key là gì?
Để chứng minh rằng cái bắt tay đã nhận được, máy chủ đã để mất hai mẩu thông tin và kết hợp chúng để tạo thành một phản ứng. Thông tin đầu tiên xuất phát từ | Sec-WebSocket-Key | lĩnh vực tiêu đề trong quá trình bắt tay khách hàng:
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Đối với lĩnh vực tiêu đề này, máy chủ đã để mất giá trị (như hiện nay trong lĩnh vực tiêu đề, ví dụ như base64 mã hóa [RFC4648] phiên bản trừ đi bất kỳ hàng đầu và dấu khoảng trắng) và nối nó với Mã định danh duy nhất toàn cầu (GUID, [RFC4122]) "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" ở dạng chuỗi, không được sử dụng bởi các điểm cuối mạng không hiểu giao thức WebSocket. Một hàm băm SHA-1 (160 bit), mã hóa base64 (xem Phần 4 của [RFC4648]), của phép nối này sau đó được trả về trong cái bắt tay của máy chủ [FIPS.180-2.2002].
Đây là điều tôi không thể hiểu được: tại sao không chỉ đơn giản là trả lại mã 101? Nếu việc sử dụng thích hợp Sec-WebSocket-Key
là để bảo mật hoặc để chứng minh họ có thể xử lý các yêu cầu websocket, thì bất kỳ máy chủ nào cũng có thể trả về khóa dự kiến nếu họ muốn và giả sử chúng là máy chủ WebSocket.
đúng là một số trường tiêu đề yêu cầu không thể sửa đổi được từ javascript trong XMLHttpRequest, vì vậy cách thức từ trình duyệt bị chặn? nhưng nếu có trình duyệt (có thể là phiên bản đầu) có thể cho phép sửa đổi trường khóa-websocket-key hoặc nếu yêu cầu được gửi bởi một chương trình để mô phỏng trình duyệt, bạn hoàn toàn có thể tự tạo tiêu đề yêu cầu, do đó làm Sec-WebSocket-Key không có ý nghĩa? – user2003548
Vui lòng đọc lại câu trả lời của tôi. Ngay cả khi bạn viết máy chủ hoặc máy khách của bạn sẽ mô phỏng yêu cầu nâng cấp chính xác, bạn sẽ làm điều đó _intentionally_ với kiến thức rằng giao thức Websockest * tồn tại *. Khóa-WebSocket-Key được sử dụng để lọc các yêu cầu _unintended_. Nếu bạn lo lắng về bảo mật - hãy sử dụng các ổ cắm web an toàn. –
do đó giao thức được thiết kế dựa trên ppl sẽ sử dụng nó bình thường, nếu phải đối mặt với một nhà văn phần mềm độc hại, nó sẽ bị hỏng như http bình thường, tôi có hiểu không? – user2003548