【问题标题】:Delphi w Indy 10: idHTTPRequest POST always is HTTP 1.0, how to make it HTTP 1.1?Delphi w Indy 10:idHTTPRequest POST 始终是 HTTP 1.0,如何使其成为 HTTP 1.1?
【发布时间】:2015-02-07 22:53:54
【问题描述】:

我们正在向网络服务发出 POST 请求。

工作正常。

但是,我们注意到请求始终是 HTTP 1.0,这导致我们的网络服务器拒绝对响应进行 gzip 压缩。

如果请求是 HTTP 1.1,则响应会被压缩。

我们如何正确地要求 Indy 10 发出 HTTP 1.1 POST 请求?

谢谢!

【问题讨论】:

    标签: delphi indy


    【解决方案1】:

    只需要写:

    idHTTP.HTTPOptions:= [hoKeepOrigProtocol];

    【讨论】:

    • 这已经在接受的答案中了......没必要再说同样的话......
    【解决方案2】:

    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 选项,则跳过上述代码(版本不变)。

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2010-09-19
      • 2012-04-07
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2011-02-15
      • 2013-09-17
      • 1970-01-01
      相关资源
      最近更新 更多