You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K6执行NTLM认证API负载测试时出现HTTP_1_1_REQUIRED错误的原因

问题原因与解决方案

这个错误的核心原因很明确:你的负载测试工具默认使用了HTTP/2协议,但NTLM认证机制并不兼容HTTP/2,而Kestrel虽然支持HTTP/1.1,但当客户端用HTTP/2发起需要NTLM认证的请求时,就会触发这个“要求使用HTTP/1.1”的错误。

为什么会这样?

NTLM是一个基于HTTP/1.1设计的认证方案,它依赖于HTTP/1.1的连接复用模型——认证流程需要在同一个TCP连接上完成多次请求交互。而HTTP/2的流机制和连接模型与HTTP/1.1完全不同,NTLM的认证逻辑无法在HTTP/2的流上正常工作。所以当Kestrel收到一个HTTP/2请求但需要NTLM认证时,就会返回这个错误,强制客户端切换到HTTP/1.1协议。

如何解决?

你需要在测试代码里强制指定使用HTTP/1.1协议,同时确保NTLM认证的配置正确。以你使用的工具(看起来是k6)为例,修改代码如下:

var url = 'https://localhost:xxxx/api/authorization/logon';
var payload = { };
var params = { 
  headers: { 'Content-Type': 'application/json' },
  http1: true, // 关键:强制使用HTTP/1.1
  auth: {
    username: 'login',
    password: '*****',
    type: 'ntlm' // 明确指定NTLM认证类型
  }
};
// 注意参数顺序:k6的http.post是(url, body, params),原代码的参数顺序有误
let response = http.post(url, payload, params);
check(response, { 'status is 200': (r) => r.status === 200 });

另外补充两个小细节:

  • 尽量不要把用户名和密码放在URL里,通过auth配置项传递更安全,也更符合工具的规范;
  • 确认你的Kestrel服务确实允许HTTP/1.1连接(默认情况下Kestrel会同时支持HTTP/1.1和HTTP/2,但NTLM会强制走HTTP/1.1)。

这样修改后,你的请求就会用HTTP/1.1发送,NTLM认证流程就能正常和Kestrel交互了。

内容的提问来源于stack exchange,提问作者Aleksander Parchomenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:02:38