QtWebApp同时开启http服务和https服务,接受来自客户端的不同请求并进行相应的处理

零、前言

在 QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证,纯代码操作 一文中已经用纯代码的形式完成了客户端和服务端的 https 协议交互。
不过,只是开放了https服务,更多情况下,http服务和https服务都是同时开启的,,
客户端根据需求去决定究竟使用哪种协议进行连接交互操作
http服务的端口默认是80端口,https服务的端口默认是443端口。

开发环境:
客户端:win10
服务端:win10 + Qt6.4

一、思想

实际上非常简单,我们只需开启两个监听器就可以了,,分别用来处理http服务和https服务。
只需要在配置文件中分别指定http服务和https服务的配置参数,然后创建基于http服务器和基于https服务器,分别用来监听来自客户端的http请求和https请求。

注意:客户端http请求和https请求url中只是 协议和端口不同,其他都是一样的,
例如:
http://192.168.64.176:80/hello
https://192.168.64.176:443/hello
http的端口默认是80,https的端口默认是443,所以可以不写。
但是,如果http的端口设置为8888,那么请求时必须在请求url中显式指定8888端口;https同理。
用户不论以http请求,还是以https请求,当请求路径为 /hello时,在本例中它们都会跳转到 /hello对应的请求处理函数中执行相同的操作,只不过以http请求时,数据是以明文形式传输的;以https请求时,数据是以密文形式传输的。

二、代码

仍然以QtWebApp的demo1作为基点。
为简化,此处设置两个请求路径,分别是/hello和/hi路径,其他自带的请求路径及其处理函数全部屏蔽。

1、修改配置文件

在这里插入图片描述

[http_listener]
port=80readTimeout=60000
maxRequestSize=16000
maxMultiPartSize=10000000minThreads=4
maxThreads=100
cleanupInterval=60000[https_listener]
port=443readTimeout=60000
maxRequestSize=16000
maxMultiPartSize=10000000minThreads=4
maxThreads=100
cleanupInterval=60000...

2、请求路径处理函数
在这里插入图片描述

void HiController::service(HttpRequest &request, HttpResponse &response)
{response.setHeader("Content-Type", "text/html; charset=UTF-8");response.write("<html><body>");response.write("<h1 style=\"color:red;\">");response.write("HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI~HI");response.write("</h1>");response.write("</body></html>",true);
}
void HelloController::service(HttpRequest &request, HttpResponse &response)
{response.setHeader("Content-Type", "text/html; charset=UTF-8");response.write("<html><body>");response.write("<h1 style=\"color:green;\">");response.write("HELLO~HELLO~HELLO~HELLO~HELLO~HELLO~HELLO~HELLO~HELLO~HELLO");response.write("</h1>");response.write("</body></html>",true);
}

3、添加路径映射
在这里插入图片描述

	// ...if (path.startsWith("/hi")){HiController().service(request, response);}else if(path.startsWith("/hello")) {HelloController().service(request, response);}// ...

4、修改main函数
在这里插入图片描述

	// ...// Configure and start the TCP listener// http节点QSettings* listenerSettings1=new QSettings(configFileName, QSettings::IniFormat,&app);listenerSettings1->beginGroup("http_listener");// https节点QSettings* listenerSettings2=new QSettings(configFileName, QSettings::IniFormat,&app);listenerSettings2->beginGroup("https_listener");// 请求路径映射器: 拦截请求路径, 根据路径转入对应的后台处理函数// http服务和https服务共用同一个映射器RequestMapper* mapper = new RequestMapper(&app);// http服务监听器, 运行在80端口new HttpListener(listenerSettings1, mapper, &app);// https服务监听器, 运行在443端口new HttpListener(listenerSettings2, mapper, &app);// ...

QtWebApp源码通俗易懂,在实际操作时有问题直接阅读源码即可知道如何操作。。

三、测试效果

首先启动服务器,服务器分别监听80端口的http服务 和 443的端口https服务。
客户端输入 http://192.168.64.176/hello 是以http协议发出请求;
客户端输入 https://192.168.64.176/hello 是以https协议发出的请求;
请添加图片描述

好,下面通过抓包看一下,,
请添加图片描述

非常的明显,http协议是以明文传输 ,,我们直接通过wireshark就能拿到其传输的内容,其毫无隐私性可言
而https协议是以密文传输的,,同样可以通过抓包拿到,不过你拿到的也是密文,,,拿到了又如何,,反正你解不开,,这就是https加密传输。整个加解密过程由ssl自动完成,用户无需手手动干预
如果不加密传输,可以在内核层去拦截网络包,修改其内容后注入到原始网络路径中,,,这就造成极大的网络数据传输风险。。。
你们所使用的外挂其中的一个思想就是修改了网络数据包后再注入到原始路径中从而达到自己的目的,此处不再赘述。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/54365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台既具备传统安防视频监控的能力与服务&#xff0c;也支持AI智能检测技术的接入&#xff0c;可应用在多行业领域的智能化监管场…

词嵌入、情感分类任务

目录 1.词嵌入&#xff08;word embedding&#xff09; 对单词使用one-hot编码的缺点是难以看出词与词之间的关系。 所以需要使用更加特征化的表示&#xff08;featurized representation&#xff09;&#xff0c;如下图所示&#xff0c;我们可以得到每个词的向量表达。 假设…

【电源专题】充电IC与DC-DC有什么区别

充电IC和DC-DC一样使用很广泛,如手机、平板等需要电池供电的系统中,一般都会见到充电IC的身影。那么大家有没有考虑过一个问题。充电IC与DC-DC有什么区别? 首先如下所示为充电IC的两个阶段,一个阶段是恒流充电阶段,我们一般称之为CC阶段,另一个是恒压充电阶段,我们称之为…

【IDEA】常用插件清单

【IDEA】常用插件清单 arthas ideaCodeium: AI Autocomplete for xxxCommit-MessageGenerateAllSetterMaven HelperMybatisPlusOne Dark themePDF ViewerRainbow BracketsRestfulToolSequenceDiagramSonarLintTranslation arthas idea 快捷生成arthas命令 Codeium: AI Autoc…

【大数据】-- docker 启动 mysql 5.7,开启 binlog

1.说明 mysql binlog&#xff1a;二进制日志文件。它有两个作用&#xff0c;一是增量备份&#xff0c;即只备份新增的内容&#xff0c;可以用于恢复数据&#xff1b;二是用于主从复制等&#xff0c;即主节点维护了一个binlog日志文件&#xff0c;从节点从binlog中同步数据。 …

三星进军机器人市场?特斯拉首款人形机器人“擎天柱”明年上市

根据报道&#xff0c;三星电子正在积极研究进军机器人市场的战略。此战略由三星电子的Device eXperience&#xff08;DX&#xff09;部门的专业企划小组制定。据可靠消息透露&#xff0c;该企划小组已着手制定相关计划&#xff0c;以推动公司在机器人市场的发展。 根据外媒报道…

LeetCode 0021. 合并两个有序链表

【LetMeFly】21.合并两个有序链表 力扣题目链接&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists/ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l…

Stable Diffusion - Style Editor 和 Easy Prompt Selector 提示词插件配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132122450 Style Editor 插件&#xff1a; cd extensions git clone https://ghproxy.com/https://github.com/chrisgoringe/Styles-Editor报错&…

使用手机相机检测电脑屏幕刷新率Hz

使用手机相机检测电脑屏幕刷新率Hz 1、电脑打开https://www.testufo.com/frameskipping 2、相机专业模式&#xff1a;快门1/10、ISO自动&#xff0c;拍摄一张照片。120Hz至少要有12个亮块&#xff0c;50Hz至少有6个亮块。 更改刷新速率 1、选择 “开始>设置>系统>显示…

【RabbitMQ(day4)】SpringBoot整合RabbitMQ与MQ应用场景说明

一、SpringBoot 中使用 RabbitMQ 导入对应的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>配置配置文件 spring:application:name: rabbitmq-springbo…

redis的配置和使用、redis的数据结构以及缓存遇见的常见问题

目录 1.缓存 2.redis不仅仅可以做缓存&#xff0c;只不过说他的大部分场景&#xff0c;是做缓存。本地缓存重启后缓存里的东西就没有了&#xff0c;但是redis有。 3.redis有几个特性:查询快&#xff0c;但是是放到内存里的〈断电或者重启&#xff0c;数据就丢了)&#xff0c…

数据安全治理5大关键技术实践分享

近年来&#xff0c;国内外对数据安全的重视程度持续提升&#xff0c;数据安全技术领域发展备受关注。从2017-2021年Gartner发布的“数据安全技术成熟度曲线”研究报告来看&#xff0c; 新兴数据安全技术呈逐年递增趋势&#xff0c;其中安全多方计算、同态加密、差分隐私等隐私增…