HTTP/1.1 允许在持久连接上使用管道化(pipeline)技术。 这是相对于 keepalive 连接的又一性能优化。
在响应到达之前, 可以将多条请求放入队列。 当第一条请求通过网络流向另一 端的服务器时, 第二条和第三条请求也可以开始发送了。 在高时延网络条件 下, 这样做可以降低网络的环回时间, 提高性能。
对管道化连接有几条限制:
必须按照与请求相同的顺序回送 HTTP 响应(如果顺序发送了请求1/2/3, 那么无论服务器处理哪个请求更快,相应的时候必须按照请求的顺序响 应)。 HTTP 报文中没有序列号标签, 因此如果收到的响应失序了, 就没 办法将其与请求匹配起来了。此时容易引起一个问题:头部阻塞。
HTTP 客户端必须做好连接会在任意时刻关闭的准备。 如果客户端打开了一 条持久连接, 并立即发出了 10 条请求,服务器可能在只处理了5 条请求之 后关闭连接,剩下的 5 条请求会失败,客户端必须能够应对这些过早关闭连 接的情况, 重新发出这些请求。
只有幂等的请求能够被管线化。HTTP 客户端不应该用管道化的方式发送会 产生副作用的请求(比如 POST)。 由于无法安全地重试 POST 这样的非幂 等请求, 所以出错时, 就存在某些方法永远不会被执行的风险。