【发布时间】:2010-11-29 00:24:58
【问题描述】:
几年来,我一直面临 HTTP 1.1 管道的问题,并继续要求服务器发送 HTTP 标头:
Connection: close
我想重新考虑这个决定。您的本机移动应用程序是否使用 HTTP 管道? 我遇到的一些 HTTP 流水线问题:
- 服务器未释放 TCP 连接
- 我的客户端从一个 HTTP 连接收到多个回复
【问题讨论】:
标签: iphone android http java-me mobile
几年来,我一直面临 HTTP 1.1 管道的问题,并继续要求服务器发送 HTTP 标头:
Connection: close
我想重新考虑这个决定。您的本机移动应用程序是否使用 HTTP 管道? 我遇到的一些 HTTP 流水线问题:
【问题讨论】:
标签: iphone android http java-me mobile
您混淆了 HTTP 管道和 HTTP 持久连接。
持久连接是您为将来的请求保留 TCP 连接但仍以串行方式发送它们的位置:http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html
流水线是 HTTP 1.1 中很少使用的功能,您只需在同一连接上触发多个请求,而无需等待响应。它实际上是 HTTP 规范所要求的,但很少被客户端使用(例如,Android 的 HTTP 库没有)。不过,大多数服务器似乎都支持它。它在同一 RFC 的第 8.1.2.2 节中进行了描述。
【讨论】:
这正是持久连接和流水线的用途:保持 TCP 连接打开直到超时到期(或浏览器关闭),并通过同一管道发送多个请求。
如果您的服务器为大量客户端提供服务,您可能需要考虑删除持久连接(您可能会用完工作程序、RAM 甚至可用端口,从而增加新请求的响应时间)
如果你想进一步阅读,关于persistent connection behaviour的指针
【讨论】:
HTTP“流水线”不仅意味着在连续的请求/响应之间保持 TCP 连接打开。它描述了一种用户代理行为,即使没有等待对最后一个请求的未决响应,它也会发送下一个 HTTP 请求。
根据我的经验,几乎所有 HTTP 服务器都支持持久连接。另外使用流水线不太稳定。 Firefox 实现了此功能,但默认禁用它。
【讨论】:
客户端/服务器与 HTTP/1.1 兼容的要求之一是支持流水线。所以我不明白使用它会有什么问题......我宁愿认为它会受到鼓励。使用流水线可以减少创建新资源、网络带宽等。
所有现代网络服务器都支持流水线,任何相当完整的客户端库都应该支持,所以我不确定问题可能是什么......也许如果您询问具体错误,我们可以帮助您。
【讨论】: