使用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水线的问题是:
- 一些服务器和大多数代理不支持它。 (也许是由于安全性/可靠性/或性能方面的考虑)
- 有些服务器支持它不正确,这可能导致客户端错误。
- 这不一定是表演胜利。
- 易受线头阻塞