【发布时间】:2016-07-06 08:15:59
【问题描述】:
有人可以告诉我关于 Content-Length 或 Transfer-Encoding:“Chunked”是 Http 请求的必要条件吗?我正在使用c++编写一个http服务器。
http响应可以使用close socket来知道消息体的长度。但是请求呢?
我已经检查了关于 http 1.1 的 RFC2616,但我对此还不够清楚。
我的问题是,如果发送的 http 请求没有“Content-Length”或“Chunked Transfer-Encoding”,我如何使用“WSARecv”来知道消息体的长度,对于我使用 WSARecv 并获取所有信息的情况巧合的是,标头和网络流以“\r\n\r\n”结尾,我无法获得消息正文的长度。如果我再次发送 WSARecv,它可能会永远等待,因为没有更多数据了。如果我不再发送“WSARecv”,如果有的话,我可能无法获得消息正文。
或者也许“Content-Length”和“chunked transfer-encoding”对于http请求是必须的?客户端应该设置其中一个来告诉服务器消息的长度?
【问题讨论】:
-
标题末尾的空白行没有任何“巧合”。它在 HTTP RFC 中指定。
-
您是否考虑过使用诸如 libmicrohttp 之类的库来为您完成大部分繁重的工作?