gpt4 book ai didi

http - 分块编码和连接 :close together

转载 作者:可可西里 更新时间:2023-11-01 16:29:35 25 4
gpt4 key购买 nike

在使用分块编码时,我对如何处理“Connection” header 感到有点困惑。是否应该不添加“Connection” header (或设置为保持事件状态,这与我们谈论的 HTTP 1.1 相同)或者是否有权将其设置为 Connection:close发送一个空 block ,意味着传输结束,但是否意味着连接结束?我认为我需要添加 Connection:close 当我打算在发送空 block 后关闭连接时,如果我不添加 Connection header ,它将保持打开状态

谢谢

最佳答案

消息长度和连接管理是两个不同的东西,实际上彼此没有任何关系(除了消息长度完全未知并且关闭连接是表示 EOF 的唯一可能方式的情况,但这种情况很少发生了,而不是你的情况)。

分块仅适用于消息长度,其中长度为 0 的 block 表示 EOF。如果连接在到达 EOF 之前过早关闭,则消息不完整,接收方可以决定是否保留/处理它。

客户端使用 Connection header 来指定它是希望服务器在发送响应后关闭连接还是保持打开状态。服务器使用相同的 header 来指定在发送响应后连接是实际关闭还是保持打开状态。

Shall the "Connection" header not be added (or set to keep-alive, which is the same as we're talking about HTTP 1.1) or is this authorized to set it to Connection:close

这与分块无关。无论消息的格式如何,客户端和服务器都应该始终表明它们对当前连接的意图,无论是应该关闭还是保持打开状态。这是通过是否存在 Connection header 来完成的,具体取决于 HTTP 版本:

如果使用 HTTP 1.0,默认行为是 close 除非显式发送 Connection: keep-alive

如果使用 HTTP 1.1+,默认行为是 keep-alive 除非显式发送 Connection: close

如果客户端请求保持事件状态,则服务器决定是否接受它。服务器可能会保持连接打开,也可能会关闭连接。

如果客户端请求关闭,服务器必须尊重它并关闭连接。

Sending an empty chunk, means the end of the transfer, but does it mean the end of the connection?

没有。只有 Connection header 可以做到这一点。特别是在 keep-alive 场景中,连接保持打开状态,以便客户端可以在先前响应的传输完成后重用现有连接来发送新请求。

I thought that I would need to add Connection:close when my intention is to close the connection after an empty chunk has been sent

正确,尤其是在 HTTP 1.1+ 中,keep-alive 是默认行为。

where if I don't add the Connection header, it would remain open

如上所述,省略的 Connection header 的含义取决于所使用的 HTTP 版本。

关于http - 分块编码和连接 :close together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com