Http请求必须使用“ContentLength”或“chunked Transferncoding”吗?

2024-10-02 08:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能告诉我有关内容长度或传输编码的信息吗:“Chunked”是Http请求的必备条件?我用C++编写了一个HTTP服务器。p>

http响应可以使用close套接字来知道消息体的长度。但是你的请求呢

我已经检查了关于http 1.1的RFC2616,但是我还不太清楚

我的问题是,如果发送的http请求没有“Content Length”或“Chunked Transfer Encoding”,我如何使用“WSARecv”来知道消息体的长度,如果我使用WSARecv并获得所有标题和网络流以“\r\n\r\n”结尾,我无法获得消息体的长度。如果我再次交付WSARecv,它可能会永远等待,因为没有更多的数据。如果我没有再次发送“WSARecv”,那么如果有,我可能无法获得消息正文

或者“内容长度”和“分块传输编码”是http请求的必备条件?客户端应该设置其中一个来告诉服务器消息的长度


Tags: 服务器信息http消息内容编码closecontent
2条回答

如果未指定Transfer-EncodingContent-Length,则请求(或响应)隐含为可变长度的请求/响应,向正文结尾发送信号的唯一方法是关闭连接(并反过来检测接收器中的关闭/eof)

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

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

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

这使我能够在同一个连接上同时执行多个请求(但要确保响应以正确的顺序返回,还需要一些技巧!)

相关问题 更多 >

    热门问题