JMeter录制WebSocket请求报400错误,Chrome DevTools显示101切换协议
JMeter录制WebSocket请求返回400 Bad Request,Chrome却返回101的原因及解决方法
核心原因
- 协议标识错误:Chrome发起的是WebSocket安全连接(
wss://协议),而JMeter录制后将请求协议错误替换为https://。WebSocket握手请求必须通过ws://(非加密)或wss://(加密)协议发起,服务器收到https://开头的请求时,会将其视为普通HTTPS请求,无法识别WebSocket握手意图,直接返回400错误。 - JMeter录制代理的协议转换问题:默认情况下,JMeter的HTTP(S)录制代理可能会把WebSocket的
wss://流量映射为https://,导致录制后的请求协议不符合WebSocket规范。
解决步骤
修正请求协议
- 找到JMeter中录制生成的请求,将URL开头的
https://直接替换为wss://。 - 如果使用JMeter的WebSocket专用采样器,确保协议下拉框选择
wss,而非https。
- 找到JMeter中录制生成的请求,将URL开头的
检查并补全握手请求头
- 对照Chrome DevTools中成功的WebSocket握手请求头,在JMeter请求中添加以下必填项:
Upgrade: websocketConnection: UpgradeSec-WebSocket-Version: 13
- 注:
Sec-WebSocket-Key是随机生成的字符串,JMeter的WebSocket采样器会自动生成该值,无需手动固定;若用普通HTTP请求模拟握手,需保证此值为随机有效字符串。
- 对照Chrome DevTools中成功的WebSocket握手请求头,在JMeter请求中添加以下必填项:
优化JMeter录制设置
- 打开HTTP(S) Test Script Recorder,进入
Advanced标签页,确认勾选Capture WebSocket frames选项,确保录制时正确保留WebSocket协议标识,避免被转换为HTTPS。
- 打开HTTP(S) Test Script Recorder,进入
使用WebSocket专用采样器
- 避免用普通HTTP请求处理WebSocket交互,安装JMeter的WebSocket插件(如Peter Doornbosch开发的WebSocket Samplers),使用专用的
WebSocket Open Connection采样器发起连接,该组件会自动处理协议、握手流程及必要头信息,减少手动配置错误。
- 避免用普通HTTP请求处理WebSocket交互,安装JMeter的WebSocket插件(如Peter Doornbosch开发的WebSocket Samplers),使用专用的
内容的提问来源于stack exchange,提问作者user41456
相关产品推荐
相关产品推荐

