gpt4 book ai didi

c++ - "Content-Length"或 "chunked transfer-encoding"是 Http 请求必须的吗?

转载 作者:可可西里 更新时间:2023-11-01 17:32:37 28 4
gpt4 key购买 nike

有人能告诉我 Content-Length 或 Transfer-Encoding: "Chunked"is a must for Http request 吗?我正在使用 C++ 编写一个 http 服务器。

http响应可以使用close socket来获知消息体的长度。但是 request 呢?

我已经查看了关于 http 1.1 的 RFC2616,但我对此还不够清楚。

我的问题是,如果发送的 http 请求没有“Content-Length”或“Chunked Transfer-Encoding”,我如何使用“WSARecv”来了解消息正文的长度,对于我使用 WSARecv 并获取所有内容的情况headers 和 net stream 恰好以 "\r\n\r\n"结尾,我无法获取消息正文的长度。如果我再次发送 WSARecv,它可能会永远等待,因为没有更多数据了。如果我不再次传递“WSARecv”,如果有的话,我可能得不到消息体。

或者“Content-Length”和“chunked transfer-encoding”对于http请求来说是必须的?客户端应该设置其中之一来告诉服务器消息的长度?

最佳答案

如果您没有指定 Transfer-EncodingContent-Length 那么请求(或响应)是隐式的可变长度请求/响应,并且是唯一的方式向主体的末端发出信号是关闭连接(并相反地检测接收器中的关闭/eof)。

这意味着这种请求/响应也是隐式的Connection: close

如果您要实现 HTTP1.1,那么您必须支持所有三种传输方法。

当我编写 HTTP 服务器时,我从“连接流”的概念中抽象出了“请求流”的概念。 “请求流”是多态的,支持读取到“EOF”的概念。没有理由你不能在那里也有一个方法来“read_chunk”。在非分块请求的情况下,这可以简单地读取到 EOF。

这让我可以在同一个连接上同时执行多个请求(但有一些技巧可以确保响应以正确的顺序返回!)

关于c++ - "Content-Length"或 "chunked transfer-encoding"是 Http 请求必须的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38219256/

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