gpt4 book ai didi

sockets - 如何通过关闭连接可靠地确定主体长度(RFC 2616 4.4.5)

转载 作者:可可西里 更新时间:2023-11-01 02:39:18 24 4
gpt4 key购买 nike

我无法弄清楚一件事。 RFC 2616 in 4.4.5声明 消息长度 可以“通过服务器关闭连接。”确定。

这意味着,服务器响应(例如返回大图像)是有效的,响应中没有 Content-Length header ,但客户端应该保持获取直到连接关闭,然后假设所有数据都已下载。

但是客户端如何确定连接是服务器故意关闭的呢?服务器应用程序可能在发送数据的过程中崩溃,服务器的操作系统很可能会发送 FIN 数据包以正常关闭与客户端的 TCP 连接。

最佳答案

你是对的,那个机制是完全不可靠的。这包含在 RFC 7230 中:

Since there is no way to distinguish a successfully completed, close-delimited message from a partially received message interrupted by network failure, a server SHOULD generate encoding or length-delimited messages whenever possible. The close-delimiting feature exists primarily for backwards compatibility with HTTP/1.0.

幸运的是,如今大多数 HTTP 流量都是 HTTP/1.1,使用 Content-Length 或“Transfer-Encoding”来明确定义消息的结尾。

教训是,消息必须有自己的终止方式;我们不能将底层传输层的 EOF 重新用作消息的 EOF。

就此而言,(格式良好的)html 文档或 .gif.avi 等确实定义了它自己的终止;如果我们收到的文件不完整,我们就会知道。因此,在没有 Content-Length 的情况下通过 HTTP/1.0 传输它并不是什么大问题。

然而,对于纯文本文档,javascriptcss等,EOF用于标记文档的结尾,因此在HTTP/1.0上是有问题的。

关于sockets - 如何通过关闭连接可靠地确定主体长度(RFC 2616 4.4.5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201980/

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