服务器
我有一个基于 Boost::Asio 的 http WebService,它异步处理客户端连接并回复带有 HTTP 标头的 JSON 内容:
std::string response += "HTTP/1.0 200 OK\r\n";
response += "Content-Length: 2000\r\n";
response += "Content-Type: application/json\r\n";
response += "Connection: close\r\n";
response += "\r\n";
response += meassageBody;
其中 messageBody 是一个大小不大于 500 的 JSON 结构。
每次 - 在将响应发送回客户端之后 - 我调用下面的序列来关闭(我相信)套接字:
m_oSocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
m_oSocket.close();
客户
为了测试服务器,我在 Qt 中编写了一个小型客户端应用程序,它向服务器询问内容并显示是否返回了任何错误。
如果服务器回复 http 标头中的“Content-Length”值:
硬编码(如上例中为 2000),然后 Qt 客户端显示错误代码 2,代表“连接关闭”;
设置为适当的 JSON 数据大小(通常约为 400-500),然后 Qt 客户端显示错误代码 0,代表“未知错误”;
问题:
在 http 标头中发送不正确的“Content-Length”值是否会对连接终止方式产生这种影响?
我认为关闭服务器端的套接字可以使连接在客户端也被视为关闭。如何同时完成两者:发送正确的“内容长度”值和客户端的“连接关闭”状态?
谢谢