C++ 是";内容长度“;或;分块传输编码“;Http请求的必备条件?
有人能告诉我有关内容长度或传输编码的信息吗:“Chunked”是Http请求的必备条件?我用C++编写了一个HTTP服务器。 http响应可以使用close套接字来知道消息体的长度。但是你的请求呢 我已经检查了关于http 1.1的RFC2616,但是我还不太清楚 我的问题是,如果发送的http请求没有“Content Length”或“Chunked Transfer Encoding”,我如何使用“WSARecv”来知道消息体的长度,如果我使用WSARecv并获得所有标题和网络流以“\r\n\r\n”结尾,我无法获得消息体的长度。如果我再次交付WSARecv,它可能会永远等待,因为没有更多的数据。如果我没有再次发送“WSARecv”,那么如果有,我可能无法获得消息正文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
或者“内容长度”和“分块传输编码”是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))