http pipeline 为什么说‘只有幂等的请求能够被管线化’?

查阅http pipeline的时候,发现了这句话,没理解为什么不幂等的请求就不能流水线发送了?
难道说是因为客户端进行流水线发送请求的时候无法保证各个请求到达服务端的次序?

阅读 5.2k
3 个回答

所谓幂等就是 多次执行对资源的影响,和一次执行对资源的影响相同。
幂等保证在pipeline中的所有请求可以不必关心发送次序和到达服务器后执行的次序,即使多次请求,返回的结果一直是一样的。
反之,若其中包含了不幂等的请求,两个请求,第一个是更新用户张三信息,第二请求是获取更新后的张三最新信息。 他们是按照次序顺序在服务器端执行的:1先执行,2紧接着执行。 但是后一个请求不会等前一个请求完成才执行, 即可能 获取张三最新信息的2号请求先执行完成,这样返回的信息就不是期望的了。

rfc7230 连接管理 pipeline 指出,服务端从 pipeline 里拿到一组请求,可以(MAY)并行地进行处理。

我认为如果其中包含不幂等的请求,并行处理可能带来意想不到的结果。

想通了,所谓pipeline要求幂等,是因为比如,依次发了1,2,3这三个请求。如果1和2和3不是幂等的,即2可能要依赖1的返回,3可能要依赖1和2的返回,此种情况下就不能通过pipeline来进行发送