当前位置: 首页 > news >正文

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证

引言:所谓http协议,本质上也是基于TCP/IP上服务器与客户端请求和应答的标准,web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库,也许是因为很少有这种需求吧,毕竟把一台嵌入式设备做http服务器也是挺奇怪。但是实际开发中也会有做简单的http server的需求。

大概有以下几个基于QT/C++的http服务器的库。

一、qthttpserver

前面说到,Qt官方在发行版中并没有提供相应的类来实现HTTP 服务端,但是Qt-lab中提供了一个qthttpserver,​ ​Github地址在这里​​,不知道基于什么原因Qt官方没有将其纳入正式的Qt发行版中,如果要使用qthttpserver的话,就得自己下载源码进行编译了,不过编译可没那么容易,会遇到各种错误,而且还没有提供说明文档,这就不太友好了。
关于编译或简单使用参考以下文章:

Qt开发的轻量级http服务器-QtHttpServer编译
关于Qt HttpServer的一些测试(Qt6.4.0rc)
QtHttpServer编译使用,亲测可用
QT基于qhttp-server搭建http服务器

可以直接把源码模块直接引入到工程里面使用,源码里面就3个模块{httpserver、logging、templateengine},按需引入即可,,,httpserver模块是最核心的,肯定是要引入的。。。
也可以将源码编译成库,,然后再通过头文件+库的形式去倒腾,,,,
具体使用哪一种看你自己喽。

二、cpp-httplib

这是Github上一个开源的C++实现http server的项目,使用方法非常简单,就只有一个头文件,引入到自己的项目中就可以使用了,不过这是一个多线程“阻塞”HTTP 库,如果您正在寻找“非阻塞”库,那就要换别的了。具体使用可以参考Github里面的文档介绍,很详细。​ ​

三、 QtWebApp

QtWepApp 是 C++ 中的 HTTP 服务器库,适用于 Linux、Windows、Mac OS 和Qt 框架支持的许多其他操作系统。
这个库使用也非常简单,而且可以支持Qt框架,所以比较适合在Qt项目中使用。
这个库它也是用QT写的,,但并不是QT官方写的,不过它的名气比Qt官方qthhttpserver库要大。

有趣的是,Qt制造商多年来一直在开发标准HTTP服务器,但到2022年,它仍然不包括在Qt库中。这也许可以解释为什么很多人使用的库。

本次选择更为实用的QtWebApp来作为http服务器。

源码下载:https://github.com/fffaraz/QtWebApp
Project homepage:http://stefanfrings.de/qtwebapp/index-en.html
Tutorial:http://stefanfrings.de/qtwebapp/tutorial/index.html
API doc:http://stefanfrings.de/qtwebapp/api/index.html

关于QtWebApp的使用,可以直接阅读源码提供的demo1,结合日志可以很快的理解。
更好的是直接参考QtWebApp的使用网站:Tutorial,真的是非常详细,,不过是英文版的,需要具备一定的英语阅读能力。网站如下图所示。

在这里插入图片描述

四、双向认证

之前,使用nginx作为https服务器,与客户端进行了双向认证和单向认证。
参考以下文章,本篇是在以下两篇文章的基础上继续开发的,,证书、私钥等的制作及流程验证在以下文章中均作了详细的说明。所以,阅读此篇文章前务必首先阅读以下两篇文章。

ssl单向证书和双向证书校验测试及搭建流程
QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

此处,采用QtWebApp来手动开发https服务器,来完成与客户端之间基于ssl的双向认证

未完待续。。。。。

http://www.lryc.cn/news/108495.html

相关文章:

  • 动态IP代理的优势展现与应用场景
  • ad+硬件每日学习十个知识点(22)23.8.2(LDO datasheet手册解读)
  • 这可是全网最全的网络工程师零基础实战视频整理,最新版分享
  • 笔记本WIFI连接无网络【实测有效解决方案,不用重启电脑】
  • js 正则表达式配合replace进行过滤html字符串遇到的性能问题
  • 2022牛客寒假算法基础集训营1
  • API对接:构建连接不同系统的技术桥梁
  • 【MySQL】仓储--维护出入库流水、库存,去重数量逻辑修正
  • 用Log4j 2记录日志
  • 【Java面试】Paxos和Raft协议的区别?
  • 手机浏览器H5打开微信小程序支付,自定义传参
  • Aligning Large Language Models with Human: A Survey
  • windows图标白了,刷新图标
  • C++ 左值和右值
  • c++学习(智能指针)[29]
  • B站高播放又涨粉的带货UP主怎么做?
  • AD21 PCB设计的高级应用(四)FPGA的管脚交换功能
  • 超低功耗LCD段码屏驱动显示芯片VK1621原厂芯片
  • 【深入探索Docker】:开启容器化时代的技术奇迹
  • 【Ajax】笔记-JQuery发送jsonp请求
  • docker更换数据存储路径
  • GPT告诉你如何延长周末体验
  • 一百四十一、Kettle——kettle8.2在Windows本地开启carte服务以及配置子服务器
  • 你知道充电桩控制主板的结构吗?
  • LeetCode 25题:K个一组翻转链表
  • Day 19 C++ 文件操作
  • Nginx源码安装
  • 【数据结构和算法】--N叉树返回根节点到目标节点的路径
  • Flutter环境搭建踩坑集锦
  • WPF上位机7——MySql