Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是";内容长度“;或;分块传输编码“;Http请求的必备条件?_C++_Http - Fatal编程技术网

C++ 是";内容长度“;或;分块传输编码“;Http请求的必备条件?

C++ 是";内容长度“;或;分块传输编码“;Http请求的必备条件?,c++,http,C++,Http,有人能告诉我有关内容长度或传输编码的信息吗:“Chunked”是Http请求的必备条件?我用C++编写了一个HTTP服务器。 http响应可以使用close套接字来知道消息体的长度。但是你的请求呢 我已经检查了关于http 1.1的RFC2616,但是我还不太清楚 我的问题是,如果发送的http请求没有“Content Length”或“Chunked Transfer Encoding”,我如何使用“WSARecv”来知道消息体的长度,如果我使用WSARecv并获得所有标题和网络流以“\r\n

有人能告诉我有关内容长度或传输编码的信息吗:“Chunked”是Http请求的必备条件?我用C++编写了一个HTTP服务器。 http响应可以使用close套接字来知道消息体的长度。但是你的请求呢

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

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


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

如果您没有指定
传输编码或
内容长度
,那么请求(或响应)隐式地是一个可变长度的请求/响应,向正文结尾发送信号的唯一方法是关闭连接(并反过来检测接收器中的关机/eof)

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

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

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


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

如果您没有指定
传输编码或
内容长度,那么请求(或响应)将被删除隐式地是一个可变长度的请求/响应,向正文结尾发送信号的唯一方法是关闭连接(并反过来检测接收器中的关闭/eof)

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

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

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

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

RFC2616已经过时

答案在。RFC2616已过时


答案在.

关于标题的空白行没有什么“巧合”。它是在HTTP RFC中指定的。您是否考虑过使用像LBMyHTTP这样的库来完成大部分的繁琐工作?在标题末尾的空白行没有什么“巧合”。它在HTTP RFCs中指定。您考虑过使用libmicrohttp这样的库来为您完成大部分繁重的工作吗?我一直在读请求,直到EOF?您的意思是读(recv?)return 0?在我发回respond之前,它不应该读取return 0…@NeoLiu您可以在消耗完所有头的那一刻开始响应。但是,是的,对于套接字,读取长度为零且没有错误代码意味着eof(即发送方称为shutdown(send)),我读取请求,直到eof?u表示读取(recv?)return 0?在我发回respond之前,它不应该读取return 0…@NeoLiu您可以在消耗完所有标题后立即开始响应。但是,是的,对于套接字,读取长度为零且没有错误代码意味着eof(即发送方称为shutdown(send))