为了使流水线工作,响应必须按照请求的顺序返回。一个天真的服务器实现可能只是在计算出响应后立即发送它。如果多个请求并行发送,并且第一个请求需要更长时间来处理(例如处理较大的图像),那么响应将不按顺序返回。
这对客户端来说是一个问题,因为HTTP是一种无状态协议,客户端无法将请求与响应匹配。它依赖于响应的顺序。
即使服务器正确支持流水线技术,性能问题也可能会出现,因为所有后续请求都必须等待第一个请求完成(阻塞头部)。
这篇文章谈到了在某些情况下的性能损失和拒绝服务攻击的潜在风险。
这篇文章 也认为流水线并不是很厉害。
WWDC 2015 - 使用 NSURLSession 进行网络请求 很好地解释了阻塞问题。(解决方案是切换到支持优先级的 HTTP 2)
因此,HTTP 流水线存在以下问题: