【发布时间】:2015-02-07 22:53:54
【问题描述】:
我们正在向网络服务发出 POST 请求。
工作正常。
但是,我们注意到请求始终是 HTTP 1.0,这导致我们的网络服务器拒绝对响应进行 gzip 压缩。
如果请求是 HTTP 1.1,则响应会被压缩。
我们如何正确地要求 Indy 10 发出 HTTP 1.1 POST 请求?
谢谢!
【问题讨论】:
我们正在向网络服务发出 POST 请求。
工作正常。
但是,我们注意到请求始终是 HTTP 1.0,这导致我们的网络服务器拒绝对响应进行 gzip 压缩。
如果请求是 HTTP 1.1,则响应会被压缩。
我们如何正确地要求 Indy 10 发出 HTTP 1.1 POST 请求?
谢谢!
【问题讨论】:
只需要写:
idHTTP.HTTPOptions:= [hoKeepOrigProtocol];
【讨论】:
将hoKeepOrigProtocol 选项包含到HTTPOptions 属性集中(将其设置为True)。除了保持ProtocolVersion 属性设置为pv1_1(这是默认值)。
在TIdCustomHTTP.Post 方法代码中有一条解释当前行为的注释:
目前在发布 POST 时,IdHTTP 会自动设置 协议到 1.0 版,与它最初的价值无关。 这是因为有些服务器不遵守 RFC 完整的程度。特别是,他们不尊重发送/不发送 Expect: 100-Continue 标头。直到我们找到最佳解决方案 如果不违反 RFC,我们会将 POSTS 限制为 1.0 版。
以下几行是对 1.0 版的更改,并带有以下注释:
// If hoKeepOrigProtocol is SET, it is possible to assume that the developer
// is sure in operations of the server
if not (hoKeepOrigProtocol in FOptions) then begin
if Connected then begin
Disconnect;
end;
FProtocolVersion := pv1_0;
end;
如果HTTPOptions 中包含hoKeepOrigProtocol 选项,则跳过上述代码(版本不变)。
【讨论】: