使用HTTPstream水线的缺点是什么?

WWDC 2012会话706 – networking最佳实践解释HTTPstream水线 。

  • 默认情况下, 它在iOS上被禁用
  • 在谈话中它将其描述为一个巨大的performance胜利。

为什么你不想使用它?

流水线

实施错误

为了使stream水线工作,响应必须以请求的顺序返回。 一个天真的服务器实现可能只是在计算后立即发送响应。 如果多个请求并行发送,并且第一个请求花费较长时间处理(例如,处理较大的图像),则响应将失序。

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

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

  • Safari显然至less使用HTTPpipe道进行image processing。 这会导致图像被交换的问题 。
  • AFNetworking用来使用stream水线,但是在报告的问题之后它被拉了。
  • 所有主stream浏览器(Opera除外)都禁用了HTTPpipe道,或者未实现。

性能问题

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

  • 这篇文章谈到了在某些情况下的性能损失和拒绝服务攻击的可能性。

  • 本文还指出,stream水线并不是一个巨大的胜利。

  • WWDC 2015 – 与NSURLSession联网解释了行头阻塞真的很好。 (解决scheme是切换到支持优先级的HTTP 2)

线路阻塞的头

总之,HTTPstream水线的问题是:

  • 一些服务器和大多数代理不支持它。 (也许是由于安全性/可靠性/或性能方面的考虑)
  • 有些服务器支持它不正确,这可能导致客户端错误。
  • 这不一定是表演胜利。
  • 易受线头阻塞