C-Server与浏览器WebSocket握手后报Invalid frame header问题排查
WebSocket握手帧头错误排查建议
几个可能的问题:
1. Sec-WebSocket-Accept计算错误
WebSocket握手的核心规则是:把客户端发送的Sec-WebSocket-Key与固定字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接后,做SHA-1哈希再进行Base64编码,得到Sec-WebSocket-Accept返回给客户端。
你使用的客户端Key是6Hw/S8rXFY4ExVDMGWWn6Q==,重新计算后的正确Accept值应为5nXcpHEM8mSrJ51osdI/IuVB2Is=,但你服务器返回的57dCnQc8YJrJ51osdI/I71QHYi4=与正确值不符,这会直接导致浏览器拒绝握手。
2. 响应头格式不符合HTTP规范
HTTP响应头必须严格遵循格式要求:
- 每个头字段行以
\r\n(回车+换行)分隔 - 所有头字段结束后,必须添加一个额外的
\r\n空行来标记头部分结束
如果你的服务器只用了\n换行,或者最后未添加这个空行,浏览器解析时会判定帧头无效,触发报错。
3. 响应中混入多余内容
检查服务器代码,确保发送完握手响应头后,没有额外输出调试信息、空字符等字节,这些多余内容会被浏览器视为无效的帧头部分。
验证修复步骤:
- 重新计算
Sec-WebSocket-Accept值,替换服务器中的错误值 - 修正服务器代码中响应头的换行符为
\r\n,并确保最后添加空行 - 用Wireshark抓包确认响应的字节流完全符合HTTP头格式,无多余字符
内容的提问来源于stack exchange,提问作者Touby
相关产品推荐
相关产品推荐

