应用层协议(上)Http(URL、Cookie、Session)内含逻辑图解通俗易懂!

news2024/11/15 9:30:12

绪论​
“少年没有乌托邦 心向远方自明朗”,本章是应用层常用且重要的协议htttp,没看过应用层建议一定先看那一篇后再看本章才能更好的去从上到下的理解应用层。
请添加图片描述
话不多说安全带系好,发车啦(建议电脑观看)。


1.Http协议

Http:协议超文本传送协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

2.1URL:

在这里插入图片描述

在WWW上(在网络中),每一信息资源都有统一的且在网上的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志(每一个网页会有一个确定的网址,通过网址就能进入),就是指网络地址(俗称网址)。

具体内容(看标注):
在这里插入图片描述
其中URL包括了:

  1. ip + port(上网本质就是进行进程间通信)
  2. 上网行为:获取的资源(网页、图片、视频、音频等资源本质也都是文件->存在Linux中)、上传的数据(也就是IO)

其中还有参数是通过urlencode和urldecode来实现:

对特殊的字符进行处理,像/*?这样的字符在URL中是有特殊意义的,所以就会把用户输进行转译避免冲突,将其转换成16进制的形式来代替将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
在这里插入图片描述

2.2http格式

在http中分为请求协议和应答协议:

  1. http请求协议:
    格式为:
    在这里插入图片描述
    如:在这里插入图片描述

其中格式的元素的意义:

  1. 请求行如(首行:[方法] + [url] + [版本]):
    在这里插入图片描述

    1. Method方法:Http的方法:
      在这里插入图片描述
      最长用的方法:
      1. GET:通常用来获取资源,也可以用来传递参数
      2. POST:上传数据
    2. 资源url路径:
      1. 网页、图片资源的路径(默认访问web根目录(/),也表示根目录放着该网站的首页)
    3. http协议版本
      1. http/1.0(适合学习,短连接(仅进行一次的请求与回复))
      2. http/1.1(主流,长连接)
      3. http/2.0
  2. Header(也就是上图的请求报文中很多的 K:V 部分)请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔,遇到空行表示Header部分结束在这里插入图片描述
    HTTP常见Header(咱们通过实际的协议后面理解记忆即可):

    1. Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
    2. Content-Length: Body的长度
    3. Content-Type: 数据类型(text/html等)
    4. User-Agent: 声明用户的操作系统和浏览器版本信息;
    5. referer: 当前页面是从哪个页面跳转过来的;
    6. location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
    7. Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
      在这里插入图片描述
      http的报头中的关键字段
      Content-Type: 数据类型(text/html等)
  3. Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个==Content-Length(上图是36byte)==属性来标识Body消息体(即实体数据)的长度在这里插入图片描述


http协议需要处理的问题:

  1. 报头和有效载荷如何分离
    1. 空行区分 (格式的红色标记处)
  2. 有效载荷如何交付
    1. 通过缓冲区和对应的函数
  3. http如何读到完整报文
    1. 一直读取,直到读到空行
    2. 其中空行(红色\r\n)是用来区分报头和有效载荷的
    3. 请求报头中会有存着 K:V = Content-Length : XXX,表示着正文(有效载荷)的长度
  4. http如何进行反序列化
    1. 直接根据\r\n进行区分出报头和数据然后反序列化即可

  1. http响应协议:
    在这里插入图片描述

    1. http协议版本(上方已经描述了就省略了)

    2. 状态码:在这里插入图片描述
      如常见的:
      200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

    3. 状态码描述:ok


现在有了请求协议和应答协议
对于用户端和服务端就有:

当用户发送请求后,服务器就会响应回来(如下图)
在这里插入图片描述
其中两边协议都是有http协议版本的:
客户端中表示的是:浏览器支持的http版本(用户一般是使用浏览器来发送请求报文)、服务端中表示的是:server支持的http版本

  1. 灰度上线:版本更新先给一定用户,确定软件稳定好用后再推广给更多用户更新使用,所以版本不同就有不同的功能。
  2. telnet:远程登录服务命令

如果网页中包含了图片,那么该图片也需要再发送请求

因为HTTP协议是基于请求-响应模型的,即客户端(如浏览器)向服务器发送请求,服务器处理请求后返回响应。在网页中,每张图片都是通过HTML中的标签引入的,而浏览器在解析到这个标签时,会识别出图片资源的URL,并针对该URL发送一个新的HTTP GET请求到服务器,以获取图片数据。

你要请求的所有的资源都有后缀,后缀决定了文件的类型,在http response 给浏览器响应的时候,正文部分是什么类型,是通过文件后缀和Content-Type的映射表来判定!

所以总结:http超文本传输协议,可以支持很多内容的发送,根据请求资源的后缀,判定Content-Type是什么

用户如何请求方法(实现上网行为):

  1. 用户获取资源,发送请求报文,接收服务端返回的应答资源
  2. 向服务器进行传参,要把的数据上传到服务器(登录,注册,搜索等等),下面使用GET/POST再结合 HTML表单来实现一个登录界面底层

GET方法:

下图的HTML代码是用到了HTML表单不会可看看w3wschool的HTML对表单的使用教学
在这里插入图片描述
在这里插入图片描述
当在输入框中输入后:helloworld、123456789
url将会变成:
在这里插入图片描述

其中包含了

  1. 所打开的目录(之前表单中设置的action):“/dira/dirb/x.html”
  2. 输入的参数(对应的名称和输入的参数):myname = helloworld、…

所以GET可以通过form表单提交参数,参数提交的方式,是通过url提参的,其实输入的数据是给了浏览器


当不起指定写的时候:默认是GET方法


POST方法:

如果我们用POST方法传递参数,是通过请求正文进行参数传递
在这里插入图片描述

在这里插入图片描述


GET方法 vs POST方法

总结:
GET方法将参数拼接在url中、POST方法将参数写在正文,是在有效载荷中。
所以:
1. url传参:字节个数有限制(有些浏览器会限制url长度),POST方法:参数长度没有限制。
2. GET 私密性更差一些(直接就是在url上),POST方法能好一些(GET和POST方法都不安全,POST也能被抓包)


Http的状态码(响应码)补充:

在这里插入图片描述

  1. 当状态码是307(temporary Redirect 临时重定向):重定向可以用来进行页面的跳转。
    客户端会在服务器发来的报头中找到location报头信息(一般是一个网址)然后通过这个网址就能重定向跳转到location存的网页
    在这里插入图片描述

  2. 301 永久性重定向,搜索引擎 – 获取网页(url、关键字:无数个网络链接进行对应)
    如果一个网站过期了(之前的域名、url等改变了),当返回301 Location它就会-更新一下老的链接

2.3cookie和session

Http是无连接、无状态(http不会记录历史发送过的请求)的。

但不难发现http虽然是无状态的但,对于许多网站在登录后就会一直认识我,因为要根据身份区分我的权限(会员/非会员),这就是通过cookie技术实现的

cookie:分为文件级(较长时间有效)、内存级(短时间有效),cookie方法又称会话管理

浏览器保存数据Set Cookie,这样在后面用的时候就无需再次输入相关信息(具体如下图),浏览器就会自动的去帮你发送请求登录上你的账号(如下图set-cookie会自动添加你之前使用的信息)
在这里插入图片描述
像微软的Edge浏览器它就会存cookie信息
在这里插入图片描述
在这里插入图片描述
当我们把Cookie信息删除后就无法自动登录了就得重新登录:
在这里插入图片描述

可能存在的问题:
当别人拿着你的cookie文件岂不是就能直接用你身份去登录某些网站了。

解决方法:
通过sessionid(仅仅只是个标记)来代替cookie信息(存的就是用户的账号和密码),通过sessionid去服务端找到对应的cookie认证,也就是将cookie信息存在服务端。
在这里插入图片描述
这样我们就能再通过管理session来防止被别人盗用账号
session:可以通过用户的时间(一段时间后cookie失效)、地址(ip地址突然跳转到外地)来判断是否需要更新cookie认证是否是本人

所以说服务器上就会有大量session、session在服务器上就需要被管理


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量计算机网络细致内容,早关注不迷路。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HZHY-AI300G智能盒试用连载体验】评测视频教程

前段时间,我参加了HZHY-AI300G智能盒试用,在电子发烧友论坛和CSDN发布了相关内容。应厂商要求,录制了相关的操作视频,现在已经发在B站了,欢迎大家观看。 【RK3588】HZHY-AI300G平台应用 1. 智能盒硬件接口介绍_哔哩哔哩…

计算机Java项目|基于SpringBoot的经方药食两用服务平台的设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参…

Python编码系列—Python中的Web安全防护:深入探索SQL注入与XSS攻击

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

【YOLO5 项目实战】(7)YOLO5 手势识别

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】(1)YOLO5 环境配置与检测 【YOLO5 项目实战】(2)使用自己的数据集训练目标检测模型 【YOLO5 项目实战】(7)Y…

langchain入门系列之一 初识langchain

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它使得应用程序能够: 具有上下文感知能力:将语言模型连接到上下文来源(提示指令,少量的示例,需要回应的内容等) 具有推理能力:依赖语…

黑猫带你学NandFlash第8篇:NAND的供电情况详解

本文依据不同型号NandFlash spec及个人工作经验整理而成,如有错误请留言。 文章为付费内容,已加入原创侵权保护,禁止私自转载及抄袭,违者必纠。 文章所在专栏:《黑猫带你学:NandFlash详解》 1 nand有几路power pin? 1.1 典型电压值 推荐的直流电压: - 相关要求 1、…

VBA技术资料MF191:将源文件夹所有文件移动到目标文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

暑期算法训练

目录 A.糖果(Candy) B.小红的数组重排 C.牛牛与LCM D.子串 E.勤奋的杨老师 F.清楚姐姐跳格子 G.方块 I H.PUBG A.糖果(Candy) 思路 :贪心,为了使操作数最少,我们要尽可能的先吃第二个盒子里的糖果&#x…

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的: 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…

java后端请求与响应总结

get 请求:将参数写在请求路径中(请求路径跟一个?后面跟参数多个参数之间用&连接) post 请求:将参数写在请求体中中 一、请求 1.简单参数 如 传一个或两个字符串、整数等 例如串一个用户名和密码 如果传入的数…

完成课题ssrf实现.SSH未创建写shell,同时完成其他漏洞复现

一、SSRF (Server-Side Request Forgery) 是一种网络安全漏洞,发生在服务器端应用程序中,允许攻击者通过服务器向任意网络资源发送请求,而无需用户直接参与。这种漏洞通常源于程序设计错误,例如当应用程序使用用户的输入作为URL请…

C++入门基础知识31

成长路上不孤单😊【14后男生,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&…

论文辅助笔记:Large Language Models are Zero-Shot Next LocationPredictors

论文理论部分:论文笔记:lunLarge Language Models are Zero-Shot Next LocationPredictors-CSDN博客 2 Data 2.1 Dataset类 2.2 下载文件 2.3 get_dataset 2.4 get_trajectories trajectory_split暂时略去 # save the test dictionary and the true l…

【Qt】常用控件QCalendarWidget

常用控件QCalendarWidget的使用 QCalendarWidget表示一个日历 核心属性 属性说明 selectDate 当前选中的⽇期 minimumDate 最⼩⽇期 maximumDate 最⼤⽇期 firstDayOfWeek 每周的第⼀天(也就是⽇历的第⼀列) 是周⼏. gridVisible 是否显⽰表格的边框 selectionMode…

Python酷库之旅-第三方库Pandas(097)

目录 一、用法精讲 416、pandas.DataFrame.memory_usage方法 416-1、语法 416-2、参数 416-3、功能 416-4、返回值 416-5、说明 416-6、用法 416-6-1、数据准备 416-6-2、代码示例 416-6-3、结果输出 417、pandas.DataFrame.empty属性 417-1、语法 417-2、参数 …

AI大模型日报#0825:10行代码让大模型数学提升20%、文心日均调用超6亿

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)、“智谱AI”(glm-4-0520)生成了今日要点以及每条资讯的摘要。欢迎阅…

Reinforcement-Learning 1.fundamental concept

1.首先用一个网格世界来理解 机器人在网格世界行走有四种形式,Accessible/forbidden/target cells, boundary. 提出一个任务,找到一个good的方式去到target 什么是good,不碰到boundary不进入forbidden最短的道路进入target 2.state State…

UE基础 —— 打包项目

目录 设置游戏的默认地图 创建打包文件 发布 签名和加密 内容烘焙 优化加载时间 使用事件驱动加载器(Event Driven Loader,EDL)和异步加载线程(Asynchronous Loading Thread,ALT) 压缩.pak文件 对…

PG数据库导致断电/重启无法正常启动

一、问题 数据库断电后,启动PG数据库后无法正常启动,报”psql: could not connect to server: No such file or directory”的错误,错误图片如下: 二、背景分析 数据库是单机版,使用k8s进行部署运行在指定节点&#…

华为OD机试-找座位(C++ Java Python)

题目描述: 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位 分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下&…