使用HTTP流水线的缺点是什么?

Rob*_*ert 47 http http-pipelining

WWDC 2012会议706-网络最佳实践解释了HTTP流水线技术.

  • 默认情况下,在iOS上禁用
  • 在演讲中,它将其描述为一场巨大的表演胜利.

你为什么不想用呢?

流水线

Rob*_*ert 78

实施错误

为了使流水线工作,响应必须按照请求的顺序返回.一个天真的服务器实现可能只是在计算后立即发送响应.如果并行发送多个请求,并且第一个请求需要更长的时间来处理(例如处理更大的图像),则响应将无序.

这是客户端的问题,因为HTTP是无状态协议,客户端无法将请求与响应进行匹配.它依赖于回复的顺序.

服务器必须按照收到请求的顺序发送对这些请求的响应.

性能问题

即使服务器正确支持流水线操作,也会出现性能问题,因为所有后续请求都必须等待第一个请求完成(行头阻塞).

  • 本文讨论了某些情况下的性能损失和拒绝服务攻击的可能性.

  • 本文还提出流水线技术不是一个巨大的胜利.

  • WWDC 2015 - 与NSURLSession联网解释了线路阻塞非常好.(解决方案是切换到支持优先级的HTTP 2)

线路阻塞

总而言之,HTTP流水线操作的问题是:

  • 某些服务器和大多数代理不支持它.(可能是出于安全性/可靠性/或性能问题)
  • 有些服务器支持它不正确,这可能导致客户端错误.
  • 这不一定是表现胜利.
  • 容易受到线头阻塞的影响

  • @HelinWang - 如果您考虑一下,代理很难实现,因为它必须以正确的顺序发回响应。它们也容易受到线头阻塞的影响(见图)。wiki 页面说“大多数 HTTP 代理不管道传出请求”。https://en.wikipedia.org/wiki/HTTP_pipelining#Implementation_in_web_proxies (2认同)