为什么websocket请求中的服务器必须回答挑战?

dan*_*rth 10 websocket

我正在阅读websocket规范,它说:

最后,服务器必须向客户端证明它收到了客户端的WebSocket握手,因此服务器不接受不是WebSocket连接的连接.这可以防止攻击者通过使用| XMLHttpRequest |发送精心设计的数据包来欺骗WebSocket服务器.或者|形式| 提交.

我已多次阅读,但我仍然不清楚为什么这是必要的.

sur*_*riv 9

挑战 - 响应机制迫使服务器确保客户端是合法的WebSocket客户端,而不是脚本做有趣的事情.

挑战在"Sec-WebSocket-Key"HTTP标头中发送.由于浏览器确保脚本无法设置"Sec-*"标头,因此可防止脚本通过XMLHttpRequest打开WebSocket连接.

如果服务器不必回答挑战,则某些惰性服务器可能会完全忽略"Sec-WebSocket-*"标头,从而使客户端不受流氓脚本的影响.

它也可能是允许客户端验证它正在与WebSocket服务器通信的一种方式,但我认为这不是主要原因,因为服务器无论如何都必须发送101个交换协议状态代码,以及"升级" :websocket"标题.