WWDC 2012 session 706 - Networking Best Practices解释了HTTP Pipelining。
- 默认情况下,它在 iOS 上禁用
- 在谈话中,它把它描述为一个巨大的性能胜利。
为什么您不想使用它?
WWDC 2012 session 706 - Networking Best Practices解释了HTTP Pipelining。
为什么您不想使用它?
为了使流水线工作,响应必须按照请求的顺序返回。一个简单的服务器实现可能只是在计算出响应后立即发送响应。如果并行发送多个请求,并且第一个请求需要更长的时间来处理(例如处理更大的图像),那么响应将是无序的。
这是客户端的问题,因为 HTTP 是无状态协议,客户端无法将请求与响应匹配。它取决于响应返回的顺序。
即使服务器确实支持流水线,性能问题也可能出现,因为所有后续请求都必须等待第一个请求完成(线头阻塞)。
本文讨论了某些情况下的性能损失和潜在的拒绝服务攻击。
这篇文章还表明流水线并不是一个巨大的胜利。
WWDC 2015 - Networking with NSURLSession 很好地解释了线头阻塞。(解决方案是切换到支持优先级的 HTTP 2)
所以总而言之,HTTP流水线的问题是: