使用JMeter WebSocket插件测试获101响应码却返回Forbidden错误如何解决
WebSocket 101响应后返回Forbidden排查方案
101响应状态码说明WebSocket握手已经完成,协议切换成功,此处返回的{"message": "Forbidden", "connectionId":"xxxxxxxx=", "requestId":"xxxxxxxx="}属于服务端业务层返回的权限校验错误,可按以下步骤排查:
鉴权参数校验
- 对比正常客户端(浏览器/APP)发起WebSocket连接时的所有请求头,检查JMeter的WebSocket采样器是否遗漏了服务端要求的鉴权字段,常见字段包括
Authorization、自定义token头、Cookie、x-api-key、签名头等 - 确认
Origin头配置和正常请求完全一致,部分服务端会校验该头防止跨域非法连接 - 校验
Sec-WebSocket-Protocol头的值,确保和服务端支持的WebSocket子协议完全匹配,无拼写错误
参数有效性校验
- 确认所有鉴权参数未过期:比如token是否在有效期内,Cookie是否为最新生成的会话值,动态签名的时间戳、随机值、加密算法是否和服务端要求完全一致
- 若使用了前置HTTP请求获取会话信息,确认JMeter已正确通过正则提取/JSON提取器拿到对应的会话参数,并正确传入了WebSocket采样器的请求头中
账号与权限校验
- 确认当前测试使用的账号具备该WebSocket接口的访问权限,部分接口会按角色分配访问权限,普通账号无法访问高权限专属通道
- 确认测试账号未被服务端封禁,JMeter所在机器的IP不在服务端的IP黑名单内,且在要求白名单的场景下已加入白名单
- 部分服务端限制同一账号同时最多建立1个WebSocket连接,确认该账号未在其他设备/环境上保持活跃的WebSocket连接
接口与配置校验
- 确认WebSocket接口路径、域名、端口配置正确,避免出现测试环境地址填为生产环境、路径拼写错误的问题
- 若使用wss协议,确认JMeter已正确配置SSL证书,或开启了SSL忽略校验的配置,避免SSL层校验异常被服务端拦截
- 检查采样器的消息帧类型配置是否和服务端要求一致,比如文本帧、二进制帧是否匹配,错误的帧类型会导致服务端无法解析请求,返回权限错误
- 确认接口请求频次未超过服务端的限流阈值,触发限流规则也可能返回Forbidden响应
内容的提问来源于stack exchange,提问作者Fin-eeth
相关产品推荐
相关产品推荐

