【问题标题】:Is HTTP 1.1 pipelining discouraged in native mobile apps?在原生移动应用程序中是否不鼓励使用 HTTP 1.1 管道?
【发布时间】:2010-11-29 00:24:58
【问题描述】:

几年来,我一直面临 HTTP 1.1 管道的问题,并继续要求服务器发送 HTTP 标头:

Connection: close

我想重新考虑这个决定。您的本机移动应用程序是否使用 HTTP 管道? 我遇到的一些 HTTP 流水线问题:

  • 服务器未释放 TCP 连接
  • 我的客户端从一个 HTTP 连接收到多个回复

【问题讨论】:

    标签: iphone android http java-me mobile


    【解决方案1】:

    您混淆了 HTTP 管道和 HTTP 持久连接。

    持久连接是您为将来的请求保留 TCP 连接但仍以串行方式发送它们的位置:http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html

    流水线是 HTTP 1.1 中很少使用的功能,您只需在同一连接上触发多个请求,而无需等待响应。它实际上是 HTTP 规范所要求的,但很少被客户端使用(例如,Android 的 HTTP 库没有)。不过,大多数服务器似乎都支持它。它在同一 RFC 的第 8.1.2.2 节中进行了描述。

    【讨论】:

      【解决方案2】:

      这正是持久连接和流水线的用途:保持 TCP 连接打开直到超时到期(或浏览器关闭),并通过同一管道发送多个请求。

      如果您的服务器为大量客户端提供服务,您可能需要考虑删除持久连接(您可能会用完工作程序、RAM 甚至可用端口,从而增加新请求的响应时间)

      如果你想进一步阅读,关于persistent connection behaviour的指针

      【讨论】:

      • 那么返回“连接:关闭”是一件坏事吗?
      • 它将关闭当前流,释放资源。如果你知道下一秒左右就不需要它,这实际上是一件非常好的事情;在所有其他情况下,它仍然可能很好
      【解决方案3】:

      HTTP“流水线”不仅意味着在连续的请求/响应之间保持 TCP 连接打开。它描述了一种用户代理行为,即使没有等待对最后一个请求的未决响应,它也会发送下一个 HTTP 请求。

      根据我的经验,几乎所有 HTTP 服务器都支持持久连接。另外使用流水线不太稳定。 Firefox 实现了此功能,但默认禁用它。

      【讨论】:

        【解决方案4】:

        客户端/服务器与 HTTP/1.1 兼容的要求之一是支持流水线。所以我不明白使用它会有什么问题......我宁愿认为它会受到鼓励。使用流水线可以减少创建新资源、网络带宽等。

        所有现代网络服务器都支持流水线,任何相当完整的客户端库都应该支持,所以我不确定问题可能是什么......也许如果您询问具体错误,我们可以帮助您。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-03
          • 2020-04-05
          • 1970-01-01
          • 2011-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多