应用层——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中,防止了别人直接登录,但是别人任然可以通过编号来直接请求访问服务器,因此服务器就需要做一些登录地理位置之类的验证,但是这样的问题还是不能得到完全的解决的。
在这里插入图片描述

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

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

相关文章

【NetTopologySuite类库】C#生成带约束(线、面)的Delaunay三角网

介绍 API地址:https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Triangulate.ConformingDelaunayTriangulationBuilder.html#NetTopologySuite_Triangulate_ConformingDelaunayTriangulationBuilder_Constraints 约束为线 效果图 红色…

基于SSM+Jsp的高校信息资源共享平台

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

海康威视综合安防管理平台 多处 FastJson反序列化RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 由于…

【Redis】 Redis 集成到 Spring Boot上面

文章目录 🍃前言🎄Spring Boot连接redis客户端🚩项目的创建🚩配置端⼝转发🚩配置 redis 服务地址🚩更改 Redis 配置文件🚩使用 StringRedisTemplate 类操作 🎍Spring Boot操作Redis客…

JAVA网络编程,反射及注解知识总结

文章目录 网络编程软件架构三要素IP端口号协议UDP协议发送数据接收数据三种通信方式 TCP协议客户端服务器端三次握手四次挥手 反射获取字节码文件获取构造方法获取成员变量获取成员方法反射的作用 动态代理注解作用格式使用位置注解的原理常见注解元注解自定义注解解析注解 网络…

安装windows11系统跳过微软账号登录,使用本地账号登录方法

在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的ShiftF10按键(部分电脑是FnShiftF10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代码oobe\bypassnro.cmd然后回车…

[AI Google] 双子座模型家族迎来新突破:更快的模型、更长的上下文、AI代理等更多功能

Google发布了Gemini模型家族的更新,包括新的1.5 Flash模型,该模型旨在提高速度和效率,以及Project Astra,这是对未来AI助手愿景的展示。1.5 Flash是专为大规模高频任务优化的轻量级模型,具有突破性的长上下文窗口。同时…

积累常用css

1、封面文字,垂直居中,可以两列并排 font-size: 20px;font-weight: 600;color: #333;line-height: 20px;display: block;word-wrap: break-word;writing-mode: vertical-lr;height: 160px;margin: 0 auto; 2、宽border效果 .dashed-box { margin: 80px…

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

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

webapi跨越问题

由于浏览器存在同源策略,为了防止 钓鱼问题,浏览器直接请求才不会有跨越的问题 浏览器要求JavaScript或Cookie只能访问同域下的内容 浏览器也是一个应用程序,有很多限制,不能访问和使用电脑信息(获取cpu、硬盘等&#…

YOLOv5车流量监测系统研究

一. YOLOv5算法详解 YOLOv5网络架构 上图展示了YOLOv5目标检测算法的整体框图。对于一个目标检测算法而言,我们通常可以将其划分为4个通用的模块,具体包括:输入端、基准网络、Neck网络与Head输出端,对应于上图中的4个红色模块。Y…

java 类加载器及双亲委派机制

1、 有哪些类加载器 还有自定义类加载器。最上面的为父加载器,加载类的路径是不一样的 2、 什么是双亲委派机制: 1. 加载时,先去找父类,父类无法加载时,在由儿子加载 3、 为什么用双亲委派: 沙箱安全&…

旧衣回收小程序开发,轻松回收旧衣物

随着环保理念的增强,回收市场得到了快速发展,吸引了不少年轻人进入到市场中创业。除了传统的废品回收外,旧衣回收也受到了大众的重视,市场规模迅速扩大,大众浪费的衣物也获得了归处。 目前旧衣回收的方式主要是线上与…

D-Day 上海站回顾丨以科技赋能量化机构业务

5月31日下午,DolphinDB 携手光大证券,在上海成功举办 D-Day 行业交流会。三十余位来自私募机构的核心策略研发、量化交易员、数据分析专家们齐聚现场,深入交流量化投研交易过程中的经验、挑战及解决方案。 DolphinDB 赋能机构业务平台 来自光…

标准发布实施 |《新能源电池工业废水处理技术指南磷酸铁锂电池》

T/ACEF 130-2024《新能源电池工业废水处理技术指南磷酸铁锂电池》欢迎各单位引用执行!有课题也可联合立项! 发布日期:2024年02月04日 实施日期:2024年03月01日 主要起草人:刘愿军、孙冬、丁炜鹏、何小芬…

网络基础_02

1.ARP协议 地址解析协议(Address Resolution Protocol) 已知对方的三层ip地址,需要二层mac地址 当一台设备(请求方)需要知道某个 IP 地址对应的 MAC 地址时,会使用 ARP封装一个数据帧。这台设备的网络层以…

论文高级图表绘制(Python语言,局部放大图)

本文将通过一个具体的示例,展示如何使用Python语言和Matplotlib库来绘制高级图表,包括局部放大图的制作。适用于多条曲线绘制在同一个图表中,但由于数据量过大,导致曲线的细节看不清,需要对细节进行局部放大。如下图: 环境准备 首先,确保你的Python环境中已经安装了以…

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

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

【启明智显彩屏应用】Model3A 7寸触摸彩屏AGV小车应用方案

一、AGV小车概述 (一)介绍 自动导向车(Automated Guided Vehicle,简称AGV),也称为自动导向搬运车、自动引导搬运车。AGV广泛应用在自动化的生产当中,大大节约劳动力和提高生产效率。 (二)现状…