为什么 POST 请求在第一个数据包中使用 PSH 标志?

为什么 POST 请求在第一个数据包中使用 PSH 标志?

我正在尝试了解 POST HTTP 事务的行为。当存在具有长 URI 的 GET 请求且需要发送多个数据包时,最后一个数据包中会使用 PSH 标志来告知服务器必须立即将数据推送到接收应用程序。

但是,在 POST 请求中,例如将图片上传到 imgur,PSH 标志会一直存在于每个有效负载块中,直到完成为止。我认为,如果我错了,请纠正我,这种行为只是因为事务的每个块都很大,必须尽快发送到上层以避免巨大的缓冲区,并且这种行为用于实时和交互式应用程序。但是,这是标准吗?这种行为在每个 POST 请求中都会出现吗?

提前致谢

答案1

“我认为......这种行为只是因为交易的每一块都很大,必须尽快发送到上层,以避免巨大的缓冲区,并且这种行为用于实时和交互式应用程序”

您描述的行为由发送客户端(软件)决定。关于 TCP 和 UDP 实现的一个常见误解是,只有一种编码方式,但编码时需要做出选择……而且并非所有程序员都会做出相同的选择。RFC 是您的好朋友。

http://www.freesoft.org/CIE/RFC/1122/88.htm “当应用程序发出一系列 SEND 调用而未设置 PUSH 标志时,TCP 可能会在内部聚合数据而不发送数据。同样,当收到一系列没有 PSH 位的段时,TCP 可能会在内部对数据进行排队而不将其传递给接收应用程序。”

可能这句话中的“是否设置 PSH 位”为(发送客户端的)程序员提供了选择。在您描述的情况下,程序员选择优先将有效负载发送到堆栈上层应用程序,而不是缓冲一系列有效负载以一次性发送到堆栈上层。

希望有所帮助。

相关内容