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

为何浏览器可正常访问网页但curl请求超时?如何解决?

问题描述

我能通过浏览器正常访问archive.li/9E2KE,但使用curl发起请求时出现超时,报错信息如下:

curl: (92) HTTP/2 stream 1 was not closed cleanly before end of the underlying stream

所用的curl命令是从浏览器网络面板通过copy as curl功能复制而来,具体命令:

curl 'https://archive.li/9E2KE' --compressed \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:124.0) Gecko/20100101 Firefox/124.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Referer: https://archive.li/wikipedia.org' \
-H 'DNT: 1' -H 'Connection: keep-alive' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'Sec-Fetch-Dest: document' -H 'Sec-Fetch-Mode: navigate' \
-H 'Sec-Fetch-Site: same-origin' -H 'Sec-Fetch-User: ?1' -H 'TE: trailers'
原因分析
  • HTTP/2协议兼容性问题:archive.li服务器对curl的HTTP/2实现存在特殊限制,处理请求时未正确关闭HTTP/2流,导致连接异常中断。
  • 冗余/不兼容的请求头:浏览器复制的TE: trailers头是HTTP/2相关字段,部分服务器对该字段的处理逻辑与curl不匹配;同时Connection: keep-alive在HTTP/2中属于冗余字段,可能干扰服务器处理。
解决办法
  • 强制使用HTTP/1.1协议:给curl命令添加--http1.1参数,绕过HTTP/2的兼容性问题。
  • 移除不兼容请求头:删掉TE: trailers和冗余的Connection: keep-alive字段。
  • 简化请求头:去掉浏览器特有的非必要字段(如Sec-Fetch-*系列),降低服务器验证负担。

修改后的示例命令

curl 'https://archive.li/9E2KE' --compressed --http1.1 \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:124.0) Gecko/20100101 Firefox/124.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Referer: https://archive.li/wikipedia.org' \
-H 'DNT: 1' \
-H 'Upgrade-Insecure-Requests: 1'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:46