使用curl保留HTTP头的大小写

21

我想使用curl发送带有自定义头信息的HTTP请求(curl http://example.com -H "Foo: bar"),但是我发现当头信息到达时,它已经被curl转换为小写字母了(上述Foo头信息被接收为foo: bar)。

如何保留请求中头信息的大小写?


1
HTTP头部是不区分大小写的,因此对于任何使用HTTP协议的人来说,大小写不应该有影响。 - Daniel Stenberg
3
除了遵循规范的人以外,实际上并不是所有人都遵循规范,这就是这个问题的重点。因为如果你想与不遵循规范的人进行交互(需要吗?),那么你需要像他们一样以特定的方式不遵循规范。HTTP 2 之前的 HTTP 至少保留大小写格式,因此,如果告诉 Curl 使用 HTTP 1.1,则它将尊重您要求设置的标题的大小写。 - Phil
1
HTTP从来都不是“大小写保留”的。它只是不区分大小写,但有些客户端会保留或强制特殊大小写。例如,curl通常会传递用户使用的大小写 - 除非是HTTP/2,根据规范是小写的。 - Daniel Stenberg
正如我之前所说,不是每个服务器都遵循规范。客户端库没有选项表示它正在与此类损坏的服务器通信似乎有点愚蠢。这是否可以作为一个功能请求? - Phil
现代的curl不会这样做 :) (至少版本7.80.0,发布于2021年11月10日不会这样做) - hanshenrik
1个回答

46

尝试强制使用HTTP/1.1的curl - 它默认使用HTTP/2,其规范规定头部必须小写。

curl http://example.com --http1.1 -H "Foo: bar"

接受我的点赞,我已经为这个问题苦苦挣扎了好几天。 - zessx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接