TIdHTTP 10.5498版本是否需手动设置Header折叠?
关于TIdHTTP 10.5.498中Header行折叠的问题解答
首先,针对你的疑问,我可以明确给出以下结论和实操建议:
1. 先理清Indy 10.5.4(即你使用的10.5498版本)的关键行为
- 你提到的
TIdCustomHTTP.Post里强制切换到HTTP 1.0的逻辑,确实存在于这个版本中——当发送application/x-www-form-urlencoded类型的POST请求时,Indy会默认将协议版本改成1.0,无视你初始的设置。 - 至于
TIdHTTPProtocol.BuildAndSendRequest里的TODO: 为HTTP 1.0请求禁用Header折叠注释,这只是一个未实现的开发计划而已。在10.5.4版本中,Indy并没有实际禁用HTTP 1.0请求的Header折叠,也就是说只要FoldLines属性为True,折叠逻辑就会生效。
2. 匹配服务器要求的配置方案
你的服务器要求Header行超过998字符时才折叠,但Indy默认的FoldLength是78——这意味着默认情况下Header会在78字符就被折叠,远早于服务器要求的阈值。所以你必须手动修改相关属性,不能依赖默认设置:
IdHTTP1.Request.CustomHeaders.FoldLines := True; // 虽默认是True,但显式设置更保险 IdHTTP1.Request.CustomHeaders.FoldLength := 998; // 完全匹配服务器要求的最大长度
另外,考虑到HTTP 1.0对Header折叠的支持并不如HTTP 1.1规范,建议你在发起POST请求前手动指定使用HTTP 1.1,避免潜在的兼容性问题:
IdHTTP1.ProtocolVersion := pv1_1;
这样能确保请求符合更规范的HTTP 1.1标准,服务器对折叠Header的处理也会更可靠。
3. 验证建议
你可以用抓包工具(比如Wireshark)抓取实际发送的请求包,查看Header是否按照预期在998字符处进行折叠,这是最直接的验证方式,能确保你的配置完全符合服务器要求。
内容的提问来源于stack exchange,提问作者user2834566
相关产品推荐
相关产品推荐

