如果我访问该页面,带有 casablanca 的 http 服务器崩溃
http server with casablanca crashes if I access the page
我使用来自 casablanca(或 cpprest)库的 http_listener 创建了一个简单的应用程序:
#include <cpprest/http_listener.h>
#include <functional>
using namespace web::http::experimental::listener;
using namespace web::http;
using namespace web;
void handle_get(http_request message)
{
message.reply(status_codes::OK, U("Hello, World!"));
};
void handle_post(http_request message)
{
message.reply(status_codes::NotFound);
};
void handle_put(http_request message)
{
message.reply(status_codes::NotFound);
};
void handle_delete(http_request message)
{
message.reply(status_codes::NotFound);
};
#define TRACE(msg) std::wcout << msg
#define TRACE_ACTION(a, k, v) std::wcout << a << L" (" << k << L", " << v << L")\n"
int main(int argc, char ** argv)
{
uri_builder uri(U("http://127.0.0.1:61561"));
http_listener listener(uri.to_uri());
listener.support(methods::GET, handle_get);
listener.support(methods::POST, handle_post);
listener.support(methods::PUT, handle_put);
listener.support(methods::DEL, handle_delete);
try
{
listener
.open()
.then([&listener](){TRACE(L"\nstarting to listen\n");})
.wait();
while (true);
}
catch (std::exception const & e)
{
std::wcout << e.what() << std::endl;
}
catch (...)
{
std::wcout << "Unknown exception" << std::endl;
}
return 0;
}
我不明白的是,当我尝试访问该页面时(X.X.X.X:XXXX;我已经测试过很多,哪个并不重要),应用程序无一例外地崩溃我得到一个 "No data received, Unable to load the webpage because the server sent no data. Error code: ERR_EMPTY_RESPONSE" 页面。
好吧,您没有在回复中发送任何数据,只是一个状态代码。所以,是的,如果您的客户需要数据而您却饿死了它,那么就会发生这种情况。
作为 message
参数传递的 http_request
class 肯定希望在调用 reply
方法(或 reply
将回复数据作为另一个参数,并且该参数默认为空数据)。无论如何,您必须以某种方式提供内容数据,您的客户期待它并依赖您,程序员来满足它。
看来问题出在CPPREST的版本上。我已经更新到 2.5 并且有效...
我使用来自 casablanca(或 cpprest)库的 http_listener 创建了一个简单的应用程序:
#include <cpprest/http_listener.h>
#include <functional>
using namespace web::http::experimental::listener;
using namespace web::http;
using namespace web;
void handle_get(http_request message)
{
message.reply(status_codes::OK, U("Hello, World!"));
};
void handle_post(http_request message)
{
message.reply(status_codes::NotFound);
};
void handle_put(http_request message)
{
message.reply(status_codes::NotFound);
};
void handle_delete(http_request message)
{
message.reply(status_codes::NotFound);
};
#define TRACE(msg) std::wcout << msg
#define TRACE_ACTION(a, k, v) std::wcout << a << L" (" << k << L", " << v << L")\n"
int main(int argc, char ** argv)
{
uri_builder uri(U("http://127.0.0.1:61561"));
http_listener listener(uri.to_uri());
listener.support(methods::GET, handle_get);
listener.support(methods::POST, handle_post);
listener.support(methods::PUT, handle_put);
listener.support(methods::DEL, handle_delete);
try
{
listener
.open()
.then([&listener](){TRACE(L"\nstarting to listen\n");})
.wait();
while (true);
}
catch (std::exception const & e)
{
std::wcout << e.what() << std::endl;
}
catch (...)
{
std::wcout << "Unknown exception" << std::endl;
}
return 0;
}
我不明白的是,当我尝试访问该页面时(X.X.X.X:XXXX;我已经测试过很多,哪个并不重要),应用程序无一例外地崩溃我得到一个 "No data received, Unable to load the webpage because the server sent no data. Error code: ERR_EMPTY_RESPONSE" 页面。
好吧,您没有在回复中发送任何数据,只是一个状态代码。所以,是的,如果您的客户需要数据而您却饿死了它,那么就会发生这种情况。
作为 message
参数传递的 http_request
class 肯定希望在调用 reply
方法(或 reply
将回复数据作为另一个参数,并且该参数默认为空数据)。无论如何,您必须以某种方式提供内容数据,您的客户期待它并依赖您,程序员来满足它。
看来问题出在CPPREST的版本上。我已经更新到 2.5 并且有效...