Watch at Ease看见世界,读懂生活。

科技 · 实用指南

curl 错误 92:HTTP/2 流异常关闭?先保留重置码,再强制 HTTP/1.1

退出码 92 表示 HTTP/2 帧层或流错误,并不指向唯一原因。先保存具体重置、判断请求能否安全重试、隔离客户端/中间层/源站,再验证完整响应。

展示 curl 客户端、中间层与源站边界的原创技术插画。
原创插画:同一条错误信息不能说明是哪一跳发出了重置。 Watch at Ease

退出码 92 表示 HTTP/2 帧层或流错误,并不指向唯一原因。先保存具体重置、判断请求能否安全重试、隔离客户端/中间层/源站,再验证完整响应。

错误 92 是 HTTP/2 帧层流错误,附带的错误名称提供更多上下文。 流错误只影响一个流;连接错误影响整条 HTTP/2 连接。 HTTP/1.1 成功只能缩小范围,不能证明哪个节点故障。

固定一个可复现请求与精确错误

记录 curl -V、方法、URL、退出码、流编号与 PROTOCOL_ERROR、INTERNAL_ERROR 或 CANCEL 等名称。共享前删除授权头、Cookie、令牌和正文。

尽量使用只读端点或测试账户。浏览器成功并不能推翻 curl 失败,因为协商、头部、代理路径和连接复用可能不同。

重跑前先判断副作用

GET/HEAD 通常可重复,但仍要核对应用结果。POST、PUT、PATCH、DELETE 可能已在源站执行,应先查日志、幂等键、作业或事务状态。

RFC 9113 对 REFUSED_STREAM 和 GOAWAY 处理边界给出明确保证;普通 CANCEL 或 INTERNAL_ERROR 不是同一保证。

用脱敏追踪定位边界

先用 --verbose 获取协议上下文;当前 curl 可用 --trace-config ids,time,http/2,ssl 定向追踪。追踪可能包含敏感数据,只能私存并脱敏。

把客户端时间与代理、CDN、网关和源站日志对齐,确定重置来自哪一跳。错误 92 本身不标明责任机器。

只改变协议做对照

在相同 URL、载荷、凭据、代理和区域下分别显式测试 --http2 与 --http1.1。HTTP/1.1 成功只说明问题依赖 HTTP/2 路径。

不要同时改缓冲区、拆载荷、换网络和换协议。一次只改一个变量,并记录 curl 与 HTTP/2 库版本。

验证完整性后再限范围绕行

核对状态、响应头、字节数或摘要及应用结果。下载先写新临时文件,验证后再替换;API 正文必须完整解析。

只有安全请求、完整结果、明确范围与期限都满足时,才把 HTTP/1.1 作为临时缓解;副作用不明或边缘节点结果不一致时应停止。

展示重试安全判断、受控协议测试与结果验证的原创技术插画。
原创技术插画:先判断请求副作用,再重试并验证完整输出。 Watch at Ease