JMeter测试Web应用查看结果树时出现401、419错误如何解决
JMeter请求返回401、419错误原因及解决方案
问题对应采样详情
Thread Name:Thread Group 1-1
Sample Start:2022-07-07 21:49:33 IST
Load time:815
Connect Time:0
Latency:815
Size in bytes:8118
Sent bytes:1831
Headers size in bytes:1483
Body size in bytes:6635
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):text
Response code:419
Response message:HTTPSampleResult fields:
ContentType: text/html; charset=UTF-8
DataEncoding: UTF-8
错误根因
401 Unauthorized
401是HTTP标准鉴权失败状态码,触发原因均为服务端判定请求无有效访问权限:
- 未登录状态下直接请求需要鉴权的接口/资源
- 请求携带的鉴权凭证(Cookie、Authorization Token等)缺失、值错误、已过期
- 访问账号本身无目标资源的访问权限
419 Page Expired
419不是HTTP标准状态码,是PHP Laravel框架自定义的错误码,从采样结果返回text/html格式响应的特征也能对应上Laravel默认错误页的返回逻辑,触发原因只有一类:CSRF跨站请求伪造防护校验失败,常见场景包括:
- POST/PUT/DELETE等非GET请求未携带CSRF令牌
- 携带的CSRF令牌和当前用户会话绑定的令牌不匹配、已过期
- 请求未携带对应会话的Cookie,导致服务端无法匹配令牌所属会话
实操解决方法
处理401错误:
- 在线程组下添加
HTTP Cookie管理器,保持默认配置即可,JMeter会自动维护请求过程中的会话Cookie,避免因为会话丢失导致的鉴权失败 - 单独调试登录接口,确认登录请求参数正确、能正常返回有效鉴权信息;如果是Cookie鉴权模式,HTTP Cookie管理器会自动处理;如果是Token鉴权模式,用
正则表达式提取器或者JSON提取器从登录响应中提取有效Token,通过HTTP信息头管理器添加到后续请求的对应鉴权字段中,不要硬编码已过期的固定Token值 - 确认测试账号本身拥有目标接口/资源的访问权限,排除账号权限不足的问题
- 在线程组下添加
处理419错误:
- 必须先添加
HTTP Cookie管理器,CSRF令牌和用户会话是强绑定的,没有正确携带会话Cookie的情况下,令牌校验必然失败 - 不要直接跳过页面访问步骤直接发POST请求:先发起GET请求访问对应表单页面,从页面响应中提取CSRF令牌,提取来源可以是响应头的
X-CSRF-TOKEN字段、页面meta标签的csrf-token值、表单隐藏域的_token值 - 将提取到的CSRF令牌添加到后续所有非GET请求中:要么通过
HTTP信息头管理器添加X-CSRF-TOKEN请求头,值为提取到的令牌变量;要么在请求参数中添加_token参数,值为提取到的令牌变量 - 仅测试环境下可临时关闭CSRF校验(生产环境禁止操作),通过调整Laravel中间件配置跳过对应接口的CSRF校验,快速完成压测脚本调试
- 必须先添加
内容的提问来源于stack exchange,提问作者Sushma K M
相关产品推荐
相关产品推荐

