支持长连接的客户端可能将它的请求“管道化”(即不等待每个响应而发送多个请求)。服务器可能并行的处理一个管道化请求的序列,如果他们都有安全的方法(RFC7231的4.2.1节),但是它必须发送与接收到请求的顺序相对应的响应。

如果连接在它接受完所有对应的响应前被关闭,管道化请求的客户端应该重试未应答的请求。在连接失败之后重试流水线请求(服务器在上一次完整响应中未明确关闭的连接)时,客户端不得在连接建立之后立即进行流水线处理,因为上一个流水线中的第一个剩余请求可能导致了错误响应 如果在过早关闭的连接上发送多个请求,则可能会再次丢失(请参阅第6.6节中描述的TCP重置问题)。

幂等方法(RFC7231的4.2.2节)对于管道化是重要的,因为他们在一个连接失败后可以被自动的重试。用户代理不应该在一个非幂等方法后管道化请求,直到那个方法的最终的响应状态码已经被收到,除非用户代理具有从涉及流水线序列的部分故障状况中检测和恢复的手段。

一个接收到管道化请求的中介在转发他们进站的时候可以管道化那些请求,因为它可以依赖出站的用户代理来确定什么请求可以被安全的管道化。如果入站连接在接收到响应前失败了,管道化中介可能尝试重试一个请求序列,这些请求还没有接收到响应如果请求都有幂等方法;否则管道化中介应该转发任何接收到的响应并且关闭对应的出站连接,这样出站用户代理可以相应的恢复。

results matching ""

    No results matching ""