在 WebSocket 客户端与服务器之间的握手过程中,会使用一些特定的头部字段,其中 Sec-WebSocket-Key
和 Sec-WebSocket-Extensions
是关键的部分。下面是如何获取和设置这两个字段的信息。
1. Sec-WebSocket-Key
定义:
Sec-WebSocket-Key
是一个随机生成的 Base64 编码字符串,由客户端在发起 WebSocket 握手时生成。它用于确保响应(即服务器返回的Sec-WebSocket-Accept
)是针对当前连接的,并防止一些类型的攻击。如何生成:
- 客户端可以使用随机数生成器生成一个 16 字节长(128 位)的随机字节数组,然后将其编码为 Base64 字符串。
示例代码(JavaScript):
function generateWebSocketKey() { const array = new Uint8Array(16); window.crypto.getRandomValues(array); // 生成随机值 return btoa(String.fromCharCode.apply(null, array)); // 转换为Base64字符串 } const websocketKey = generateWebSocketKey(); console.log(websocketKey); // 输出 Sec-WebSocket-Key 值
2. Sec-WebSocket-Extensions
定义:
Sec-WebSocket-Extensions
用于表示客户端支持的扩展。这可以包括各种协议扩展,如压缩或其他功能。如果不需要特定的扩展,可以省略这个头部。如何设置:如果你的应用需要某些特定的扩展,你可以根据 WebSocket 协议和你所需支持进行设置。这个值通常是一个字符串,指定了请求支持哪些扩展。
示例代码(JavaScript): “`javascript const websocketExtensions = “permessage-deflate”; // 示例:请求压缩扩展
const websocket = new WebSocket(“ws://yourserver.com”, [], {
headers: {
"Sec-WebSocket-Key": websocketKey,
"Sec-WebSocket-Extensions": websocketExtensions
}
}); “`
总结
在客户端创建 WebSocket 连接时,主要关注的是正确地生成和填充 Sec-WebSocket-Key
字段,而 Sec-WebSocket-Extensions
根据具体需求决定是否包含及其内容。大多数常见实现会自动处理这些头,因此你通常不需要手动设置它们,但了解它们在 WebSocket 握手中的作用是很重要的。
内容由零声教学AI助手提供,问题来源于学员提问