Mongoose搭建本地Https服务器

业务需求,需要本地起个服务器和浏览器进行通信,http服务会有跨域的问题,好心塞,然后又花了差不多一周时间去整这个https,大佬给我推荐了Mongoose,花了点时间去弄这个东东。

  1. Mongoose下载地址: Mongoose
  2. Demo:Simplest_web_server_ssl

Demo里面很贴心的准备了程序用到的证书和密钥,以及浏览器需要安装的证书,如果需要用自己的自签证书,用OpenSSL制作过程打算下一个帖子来写。

Demo是用来展示程序目录下的文件系统,如果需要实现自己的功能,重写消息处理函数即可。

static void ev_handler(struct mg_connection *nc, int ev, void *p) {
	if (ev == MG_EV_HTTP_REQUEST) {
		mg_serve_http(nc, (struct http_message *) p, s_http_server_opts);
	}
}

事件类型看了下他的宏定义,有好多,你可以根据业务场景的需要选择响应不同事件,我这里就直接用MG_EV_HTTP_REQUEST。

服务端发送应答消息最后用到的函数还是mg_send(),所以只需要这一个就够了,需要发送哪些内容就得了解一下http报文结构,响应报文主要有3部分:

  1. 起始行:“HTTP/1.1 200 OK\r\n”
  2. 首部:“Content-Type:text/html\r\nAccess-Control-Allow-Origin: *\r\nContent-Length:17\r\n\r\n”
  3. 主体:“This is a Test!!!”

注意首部和主体部分有一个空行,所以首部结尾是"\r\n\r\n",调用mg_send()方法,但我分了两次调用,将起始行和首部封装在一起了,除了Content-Length会因为返回内容的长度而进行修改,所以我基本上就写死了,直接上代码吧:(PS:首部内容可以找前端了解一下,让他给一套标准,不过我感觉上面4个基本就够了,需要其他得可以根据业务添加)

	std::string sHeader, sContent;
	//...省略部分代码
	mg_send(nc, sHeader.c_str(), sHeader.length());//头部信息
	mg_send(nc, sContent.c_str(), sContent.length());//返回数据内容

刚开始写帖子,写的有点low,有什么好的建议可以私信我或者直接在下方评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值