请有人(雷米·勒博(Remy Lebeau?))阐明TidHTTP中标题行折叠的点吗? 我的服务器希望如果该行超过998个字符,则标题将被折叠,我的一个肯定会折叠。
在许多其他讨论此问题的帖子中,我看到this one,这是雷米说过的一段或多或少的权威性帖子
默认情况下,TIdHeaderList.FoldLines属性设置为True
and
TIdHeaderList.FoldLength属性的默认值为78
这似乎表明我在使用TIdHTTP时不需要做任何特殊的事情就可以折叠标题。
但是,查看TidHTTP的源代码,我发现Remy的注释如下
(在TIdCustomHTTP.Post
中)
当前,在发布POST时,IdHTTP将自动设置 协议版本1.0与其最初的值无关。
和
(在TIdHTTPProtocol.BuildAndSendRequest
中)
TODO:禁用HTTP 1.0请求的标头折叠
无论我是否要求1.1,这似乎都表明我的请求将始终使用HTTP 1.0请求,并且标题行也不会折叠。
因此,我的问题很简单;使用TidHttp ver 10.5498时,我是否需要线条
IdHTTP1.Request.CustomHeaders.FoldLines := true;
IdHTTP1.Request.CustomHeaders.FoldLength := 998; //could be less, but not more
还是我可以简单地接受默认值并确信标题会正确折叠吗?
答案 0 :(得分:0)
默认FoldLength
为78个字符,除非 QuoteType
为QuoteHTTP
,然后默认为MaxInt
(有效地禁用HTTP折叠标头,即使FoldLines
为True)。因此,如果要将HTTP标头折叠为998个字符,则需要手动设置FoldLength
。
请注意,尽管RFC 1945(对于HTTP 1.0)和RFC 2616(对于HTTP 1.1)确实允许折叠标题:
可以通过在每条额外的行之前添加至少一个SP或HT来将标头字段扩展为多行,但是不建议这样做。
可以通过在每条额外的行之前添加至少一个SP或HT,将标题字段扩展到多行。
RFC 7230(更新HTTP 1.1)不赞成这种做法:
从历史上看,HTTP标头字段值可以通过在每条额外的行之前添加至少一个空格或水平制表符(obs-fold)来扩展多行。除在message / http媒体类型(Section 8.3.1)中之外,该规范不建议使用此类折叠。 发件人不得生成包含折行的消息(即,其任何字段值都包含与obs-fold规则匹配的消息),除非该消息打算用于包装在message / http中媒体类型。
对于TIdHTTP
强制HTTP 1.0处理POST
请求,您可以通过在hoKeepOrigProtocol
属性中启用TIdHTTP.HTTPOptions
标志来防止这种情况。