应用层——HTTP协议(自己实现一个http协议)——客户端(浏览器)的请求做反序列化和请求分析,然后创建http向响应结构

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层

我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层

之前的网络计算机是我们自定义的协议:传输的数据最终是什么样的结构!是如何进行序列化反序列化的,
而对于我们的应用层我们已经有了非常完善的协议:

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用.
HTTP(超文本传输协议) 就是其中之一.

当我们在浏览器(相当于客户端)使用URL(网址)去访问我们的服务器的时候就可以以http协议的方式对服务器发送请求,服务器也可以以这样的格式给我们发送响应:

URL:在浏览器用它就快速的向服务器发送一个请求(相当于一个客户端)
在这里插入图片描述
http请求:
在这里插入图片描述
http相应
在服务器收到http请求后:反序列化,然后再对请求做处理,得出结果,然后把结果也按照http协议的结构储存,序列化,发送回给客户端(给客户端响应):
在这里插入图片描述

自写一个能够收发http请求的服务器(进程),并且自定义一个自己的http协议(结构体字段):

服务器的代码编写:
1.创建监听套接字,绑定相应的网络信息(ip和port)。

在这里插入图片描述
启动服务器:监听套接字监听请求,监听到请求后,创建了新的套接字来供于这次请求的对家,并创建新线程来完成对请求的处理:
在这里插入图片描述
ThreadRun:对线程的处理:接收字符串型的请求,并对他做反序列化(用我们自定义的http协议来反序列化):

在这里插入图片描述
htttp请求不仅可以向服务器请求html的文本,还可以向服务器请求图片,视频等资源,所以他叫超文本协议,
所以http响应的kv字段中还有一个TYpe所传文本类型的字段

在这里插入图片描述

请求方法:
http常用的两种方法:GET /POST
主要作用:客户端(浏览器)不仅可以向我们的服务器获取资源,而且还可以传参
这两种方式的区别就是传参的方式不同。
这两中方式的传参是通过html文档中的form表单来完成的,当我能请求的html文档中有form表单是,我们的客户端就可以传参
GET:
所传参数会被拼接到URL中,向服务器发送请求传参
在这里插入图片描述
在这里插入图片描述

POST:
所传参数会被保存到请求的有效载荷中,只有参数所要传到的那个路径会被拼接到URL中:
在这里插入图片描述
在这里插入图片描述

get vs post
在这里插入图片描述
两种方法其实都不安全,即使post的参数会被放到请求的文本中保存,但是通过抓包仍然可以完全的看到。
在这里插入图片描述

HTTP响应结构

通过对http请求的分析,创建出http响应结构,然后再序列化后发送回客户端。

在这里插入图片描述
1、构建响应结构

在这里插入图片描述
构建header内容
然后把请求的内容放到有效载荷中

响应的一些特性:

301:重定向

我们把状态码设置为301的话,然后在header字段中添加:
std::string location=“Location:http://www.qq.com\r\n”;
当我们服务器返回这样的响应的时候,就不会去访问有效载荷中的网页,而是马上去访问location中的链接网页
在这里插入图片描述
原理图:
在这里插入图片描述
http响应的一些状态码,及其含义:
在这里插入图片描述

http协议的特性:

cookie文件和session结构
1、无连接:是不要去链接的而是双方都定好此协议(我们所写的套接字的监听和链接是底层的,不是http协议)
2、无状态:每次请求都是独立???
但是为什么我们有的网站登录之后下一次就不在去请求登录了呢?
因为:如果我们获取到登录页面之后,然后把登录信息填好后再次请求发送给服务器之后,服务器的登录成功响应会header字段为我们添加Set-Coookie字段返回给客户端(浏览器),浏览器有一个cookie文件,可以保存响应回的这个字段,当浏览器再次去访问这个服务器的时候,http请求中的header字段就会携带cookie这样的请求字段,服务器就会根据这个字段自动认证
在这里插入图片描述
在这里插入图片描述
但是这样的直接保存到浏览器的cookie中的用户信息是私密铭感信息,所以我们的服务器要把登录页面发送来的用户信息做封装,最后生成一个独有的编号返回给登录成功的这个客户端使用,这样虽然避免了用户直接信息暴露到浏览器的cookie中,防止了别人直接登录,但是别人任然可以通过编号来直接请求访问服务器,因此服务器就需要做一些登录地理位置之类的验证,但是这样的问题还是不能得到完全的解决的。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

概率论与数理统计,重要知识点——全部公式总结

二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计

基于SpringBoot+Vue单位考勤系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

【SkyWalking】使用PostgreSQL做存储K8s部署

拉取镜像 docker pull apache/skywalking-ui:10.0.1 docker tag apache/skywalking-ui:10.0.1 xxx/xxx/skywalking-ui:10.0.1 docker push xxx/xxx/skywalking-ui:10.0.1docker pull apache/skywalking-oap-server:10.0.1 docker tag apache/skywalking-oap-server:10.0.1 xxx…

K-BAT01,K-CU01和利时卡件

K-BAT01,K-CU01和利时卡件。现场控制站下装与在线调试。9二、组态流程:操作站组态控制站组态新建工程控制站用户组态历史站组态下装现场控制站下装历史站下装操作员站10三、组态详解:1、K-BAT01,K-CU01和利时卡件。新建工程:打开工程总控&…

SAP HCM HR_PAD_HIRE_EMPLOYEE 自定义信息类型字段保存问题

导读 INTRODUCTION SAP HCM入职程序:SAP HCM入职程序有两个一个是HR_PAD_HIRE_EMPLOYEE一个是HR_MAINTAIN_MASTERDATA,前面的函数是SAP为新框架开发的,后面函数是旧的逻辑,这两个函数的在于底层的结构不一致,对于自定…

Three.js——粒子效果、粒子水波、粒子组成立方体

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

Linux卸载RocketMQ教程【带图文命令巨详细】

巨详细Linux卸载RocketMQ教程 #查询rocketmq进程 ps -ef | grep rocketmq #杀掉相关进程 kill -9 进程id #查找安装目录 find / -name runbroker.sh #删除rocketMQ目录 rm -rf 安装目录框起来的就是进程id,全部杀掉 这里就是我的安装目录,我的删除命令…

【进程调度的基本过程】初步认识进程和线程的区别与联系:计算机是如何工作的

​ 🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🐺一.冯诺依曼体系结构 认识计算机的祖师爷 -- 冯诺依曼 冯诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇&…

北航第四次数据结构与程序设计编程题复习

到期末了,所以再来复习一下以前的作业。 北航第四次数据结构与程序设计编程题 一、栈操作(栈-基本题)二、C程序括号匹配检查三、计算器(表达式计算-后缀表达式实现,结果为浮点)四、文本编辑操作模拟&#…

Flutter 使用ffigen生成ffmpeg的dart接口

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频 第七章 使用ff…

数据挖掘--引论

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 1.2什么是数据挖掘 数据挖掘是从大量数据…

【Python】成功解决SyntaxError: invalid syntax

【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&am…

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端。 pc1,pc2(客户端): 虚拟机(服务端): 客户端 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…

使用MATLAB的BP神经网络进行数据分类任务(简单版)

BP神经网络,即反向传播(Backpropagation)神经网络,是一种多层前馈神经网络,它通过反向传播算法来更新网络权重。这种网络结构特别适合于分类和回归任务。 MATLAB环境设置 在开始之前,请确保MATLAB环境已经…

smbmap一键查扫描SMB共享信息(KALI工具系列十八)

目录 1、KALI LINUX 简介 2、smbmap工具简介 3、在KALI中使用smbmap 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 寻找共享目录 4.2 指定目标主机 4.3 指定共享目录 4.4 带密码访问 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功…

LeetCode 7- 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [-231, 231 - 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入&…

【计算机网络】对应用层协议中HTTPS协议的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

让 AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

文章部分素材来源 | CSDN(ID:CSDNnews) 前言 在科技日新月异的今天,人工智能(AI)已不再是遥不可及的未来科技,而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车&#xff0c…

超详解——识别None——小白篇

目录 1. 内建类型的布尔值 2. 对象身份的比较 3. 对象类型比较 4. 类型工厂函数 5. Python不支持的类型 总结: 1. 内建类型的布尔值 在Python中,布尔值的计算遵循如下规则: None、False、空序列(如空列表 [],空…

【全部更新完毕】2024全国大学生数据统计与分析竞赛B题思路代码文章教学数学建模-电信银行卡诈骗的数据分析

电信银行卡诈骗的数据分析 摘要 电信银行卡诈骗是当前社会中严重的犯罪问题,分析电信银行卡交易数据,找出高风险交易特征,建立预测模型,将有助于公安部门和金融机构更好地防范诈骗行为,保障用户的财产安全。 针对问…