我正在使用Cesanta Mongoose c ++网络库在C ++中构建HTTP服务器。本质上,我试图将流量从Web浏览器重定向到localhost上的代理。我最近通过购买证书和域并按照说明启用猫鼬(https://cesanta.com/docs/http/ssl.html)的说明,添加了对HTTPS的支持。服务器现在正在侦听端口443,并且运行良好。我已经将Web浏览器配置为将HTTPS请求定向到localhost:443,但它似乎并未触发HTTP服务器。当我的服务器在端口8080上侦听并且将Web浏览器配置为将请求发送到localhost:8080时,它会触发Web浏览器,但不支持https。配置Web浏览器以将请求发送到localhost:443是否有问题?
答案 0 :(得分:0)
ngrok 解决方案非常好。
如果您想直接在应用程序中添加重定向,请设置两个侦听连接:一个 HTTP,一个 HTTPS。
为这两个监听连接使用不同的事件处理函数:HTTP 处理程序只会发送重定向,而 HTTPS 处理程序会做真正的工作:
static void f1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
struct mg_str *host = mg_http_get_header(hm, "Host");
if (host == NULL) {
mg_printf(c, "HTTP/1.1 500 Failed\r\n\r\n");
} else {
mg_printf(c, "HTTP/1.1 301 Moved\r\n"
"Location: https://%.*s%.*s\r\n\r\n",
(int) host->len, host->ptr,);
(int) hm->uri.len, hm->uri.ptr); // Send redirect to HTTPS!
}
c->is_draining = 1;
}
}
...
mg_http_listen(&mgr, "http://0.0.0.0:80", f1, NULL); // HTTP
mg_http_listen(&mgr, "https://0.0.0.0:443", f2, NULL); // HTTPS