当使用 HTTP/1.1 流水线时,标准对发出多个请求而不等待每个请求完成有何规定?服务器在实践中做什么?
我问是因为我曾经尝试编写一个客户端,该客户端会针对多个文件发出一批 GET
请求,并记得出现错误。我不确定这是因为我错误地发出了 GET
还是需要等待每个单独的请求完成才能发出下一个 GET
。
最佳答案
管道就是这样——在一个连接上有多个“正在运行”的请求。
在开放的互联网上,流水线不是很常见,因为少数服务器和中介没有正确处理,弄乱流水线的后果可能很严重(例如,混淆对两个不同用户的响应)。
请记住,只有 HTTP/1.1 支持流水线;如果你有一个 HTTP/1.0 服务器,或者中间有一个 1.0 代理,它可能无法工作。
此外,流水线只能用于 GET 和 HEAD 等“幂等”方法;不允许用于 POST 等。
参见: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p1-messaging-09#section-7.1.2.2
关于language-agnostic - 使用 HTTP/1.1 Pipelining 发出多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2665941/