【网络原理】深入理解关于HTTP协议和报文的格式以及重要的属性

news2024/11/24 22:00:19

前言

🌟🌟本期讲解关于HTTP协议的重要的机制~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

 

目录

​编辑

1.HTTP协议

1.1HTTP介绍

1.2HTTP的工作

1.3HTTP的抓包

1.4HTTP的报文

2.HTTP 请求

2.1认识URL

2.2认识URL encode

2.3认识方法(method)

 2.4认识请求 "报头" (header)

1.HOST

2.Content-Length

3.Content-type

4.User-Agent (简称 UA)

5.Referer

 6.cookie

 3.总结


 

1.HTTP协议

1.1HTTP介绍

http:全称超文本传输协议,是在应用层使用广泛的一种协议;

具体的关于http的发展时间如下:

http最早出现是在1991年,⽬前已经发展为最主流使⽤的⼀种应⽤层协议;

最近版本的HTTP:后面出现的HTTP2.0与HTTP3.0引入了更多的特性: 

1.提高了传输的效率

2.提高了传输的安全性

 并且在HTTP3.0之前都是使用的传输层协议就是TCP,我们知道TCP具有可靠性,但是效率比较低,所以在HTTP3.0时传输层使用就是UDP,并实现了一些列复杂的机制,实现可靠性~~~

问题1:什么是超文本传输协议?

我们知道文本就是字符串,就是能在utf8码表上找到合法的字符,但是超文本不仅仅是字符串而且还包括了图片,特殊的格式; 

1.2HTTP的工作

用处:HTTP主要的使用场景就是浏览器网站对于服务器之间的数据传输;

补充:这里的网页是由HTML来进行构建的,但是一个好的网页还需要CSS与Javascript来进行公共的实现(前段的三剑客) 

解释:当我们使用浏览器对一个网页进行访问的时候,浏览器就会给服务器发起一个http请求,然后服务器进行计算后通过http响应返回~~~

注意: HTTP的交互过程中,是非常典型的“一问一答”过程,但是在网站的开发中这也是够用了,并且在服务器自动给浏览器发送消息,应用层还提供了websocket搭配http来进行使用

1.3HTTP的抓包

抓包工具:这里就涉及到一个重要的工具“抓包工具”,这里抓http的报文所以使用的就是fiddler

问题2:什么是抓包工具?

抓包工具本质上是一个代理程序,能够获取到网络上传输的数据,他是工作在应用层上面的,这里可以理解为一个中间商,对于浏览器对于服务器数据的传输,他是十分清楚的; 

大概的流程就是如下:

问题3:如何下载fiddler? 

具体步骤如下:

1.先搜索fiddler的官网,注意不要点击到盗版的了:

2.然后再点击进入页面后,然后点击经典版本的fiddler:

 3.点击尝试下载按键:

 4.安装完成后,进入页面点击tool的option:

5.最后点击http中所有的选项进行勾选:

 最后如果跳出安全许可,这个一定要点击yes,一定一定要点击yes~~~

1.4HTTP的报文

打开一个网站,浏览器和这个服务器之间的http交互不是只有一次的,是很多次的第一次交互就是拿到这个页面的html,还有css与js,并且html被加载后还会触发http的请求,然后又是js等又触发http~~~

所以我们直接进行一次抓包,我们进行百度的抓包进行举例:

可以看到此时蓝色部分就是html,他往往是一个网站的入口;

接下来我们点击raw然后点击用记事本打开即可看到其内部http的报文结构:

在右下角点击用记事本打开: 

 

最后可以看到此时的报文结构就是如下所示的:

那么这个只是一小部分,所以接下来的将进行具体的讲解;

1.HTTP的请求结构

1.首行:这里包含了三个部分,如下图示所示:

GET https://www.baidu.com/ HTTP/1.1

GET:这里表示就是方法;

中间部分:这里即是URL;

HTTP/1.1:这里就是HTTP的版本号

2.请求头:请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束

Host: www.baidu.com
Connection: keep-alive
sec-ch-ua: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

 这里只截取了一小部分

3.空行:这里表示的就是请求头的结束,最为一个标记

4.正文(body):http的载荷部分 Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个 Content-Length属性来标识Body的⻓度;

2.HTTP的响应结构

1.首行 :这里也是包含了三个部分,如下:

HTTP/1.1 200 OK

HTTP/1.1:代表的就是版本号

200:状态码

OK:状态码的描述

2.响应头:响应的属性,这里和上面的请求是一致的 

Connection: keep-alive
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Fri, 01 Nov 2024 13:29:43 GMT

 这里小编只截取了一小部分;

3.空行:这里也是进行响应头的结束标记

4.响应正文: 这里就是载荷,并且这里的响应载荷就是html

具体如下:

<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" 

 问题4:为啥http报文存在空格这种结构?

1.HTTP 协议并没有规定报头部分的键值对有多少个. 空⾏就相当于是 "报头的结束标记" 

2.HTTP 在传输层依赖 TCP 协议, TCP 是⾯向字节流的. 如果没有这个空⾏, 就会出现 "粘包问题"

这里的使用TCP协议是在HTTP3.0之前哦,现在主流不是这个~~~

2.HTTP 请求

2.1认识URL

URL基本格式:平时我们俗称的 "⽹址" 其实就是说的 URL (Uniform Resource Locator 统⼀资源定位符)(即描述一个网络上的资源的位置

1.简单URL

我们最常见的最简单的URL就是:https://www.baidu.com;分解一下就是:协议名称+域名

2.基本的URL

就拿我们一个csdn的网址为例:

https://mp.csdn.net/mp_blog/creation/editor?spm=1010.2135.3001.4503

内容解释: 

此时就明显多了很多的内容,问号之前就是一个路径(带有层次结构的路径),后面的就是查询字符串,这里的意思是编写的程序员知道的,我们不知道~~

3.完整的URL

具体样式如下:

小编就讲解几个比较重要的;

1.服务器地址与服务器端口号:

这里代表就是域名或者IP地址,后面带有的端口号表示访问服务器那个端口

2.查询字符串:

就是代表的是对于请求进行补充,键值对的格式,键和值用“=”,键值对用&符号进行分割;

3.登录信息:

现在都是通过单独的登录页面进行身份的验证 

4.片段标识符:

表示当前某页的某个部分,不同片段标识可以完成页面内的跳转

总结:这个URL就是代表的一个在网络上的资源位置,通过IP地址知道服务器在哪里,端口号就知道是哪一个程序,文件路径就知道访问的那个资源;

2.2认识URL encode

1.问题的提出

我们在上面的介绍中了解到查询字符串(query string)是自定义的键值对,那么在URL本身中有些特殊符号具有特定的意义,如果当query string包含了与URL特殊的符号,此时就会导致浏览器或者服务器解析失败

那么此时对这个特殊符号进行转义,这个过程就叫做URL encode

2.解析过程

这里的解析过程就是将特殊符号的ascii码值拿出来,进行十六进制的转化,最后在前面加上“%”;

例如:这里的++就是解析后16进制为2B,2B然后再这两个字符之前加上“%”就实现了转义~~~

2.3认识方法(method)

且看下面的一张图:

这里主要使用的就是前面两个就是我们经常使用的,但是这里的GET与POST的方法是可以相互替换使用的,这上面的表只是一厢情愿,我们一般不会按照这里说明进行编写;

GET:GET 是最常⽤的 HTTP ⽅法. 常⽤于获取服务器上的某个资源. 在浏览器中直接输⼊ URL, 此时浏览器就会发送出⼀个 GET 请求;
一般情况下在登录的时候我们可以进行抓包;

我们可以看到此时就是一个GET;

当此时还有POST的一个方法:

 

一般来说:GET是没有body的,然后POST是存在body的,GET通常会把补充信息存在查询字符串里,然后POST是存在body里,当然这只是常见的情况; 

 在POST的body中我们常使用就是base64进行编码,通过四个字节来表示三个字节,主要是为了去掉原始是数据的二进制数据;(有些场合只适用于文本)

可以看到这里body的base64编码:

{"username":"18582914619","password":"QTQ0s88XKlMuE7C0/s30OQ==","uuid":"a142cb0d852f4d53ba570922b34e7dc3","status":0}

GET与POST的区别:

在本质上,这两个其实并没有区别,但是在习惯上这里还是存在区别的

1、GET通常把数据放在URL的查询字符串里,POST主要把数据放在body里;

2、GET通常表示的是拿到数据,而POST主要表示的是传输数据给服务器;

3、在标准文档中GET是被要求设计成幂等的,而POST无这个要求;

4、GET可以被浏览器收藏但是POST不可以

所谓的幂等:就是输入的内容是一定的,多次输出的结果不是一定的,那么就叫做不是幂等的相反多次输出的结果是一定的,那么就叫做幂等的;

 2.4认识请求 "报头" (header)

1.HOST

表示服务器的IP地址以及端口;

2.Content-Length

表示body中的数据的长度

由于HTTP底层也是基于tcp进行,连续传输多个http数据报,应用程序读这些数据的时候就要明确包与包之间的分界;

3.Content-type

表示body中数据的格式;

可以看到此时这里的格式就是json的格式,即描述body中数据的格式;

除此之外还有xml的格式,当然这里还有x-www-form-urlencoded,即from表单,表示的就是通过HTML中的from标签表示出来一种格式;

补充:由于服务器与浏览器之间的交互是非常低效的,所以会把固定不变的内容缓存到硬盘上,那后序的读取直接从硬盘上读取,提升效率;所以这里抓包的时候有些就是灰色的;

4.User-Agent (简称 UA)

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0

可以看到这里主要描述了,操作系统的信息,以及浏览器的信息;

所以UA:主要描述了用户使用的设备信息;

解决问题:

若存在开发中的新特性,存在新老设备的兼容问题,那么使用UA就可以根据这里的用户使用的设备信息,来决定设否使用新的特性;例如我们现在的pc端和手机端,这里的UA就保存这里的信息,来判断用户设备是什么来决定这里的展示页面是横屏还是竖屏的;

后来有了响应式的布局,那么此时就是通过css3的媒体查询来进行当前用户的屏幕尺寸,来进行应用对应的样式; 

5.Referer

所谓的referer主要是描述了当前的页面是从哪里来的;

Referer: https://cn.bing.com/search?q=%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1%E7%B3%BB%E7%BB%9F&gs_lcrp=EgRlZGdlKgcIARBFGMIDMgcIABBFGMIDMgcIARBFGMIDMgcIAhBFGMIDMgcIAxBFGMIDMgcIBBBFGMIDMgcIBRBFGMIDMgcIBhBFGMIDMgcIBxBFGMID0gEKNTk2NTM0ajBqMagCCLACAQ&FORM=ANNTA1&PC=CNNDDB 

 6.cookie

 本质上就是:在浏览器上本地持久化存储数据的机制,一般用于访问服务的身份标识;

来源:我们浏览器是可以访问我们硬盘文件,但是网页不行,所以浏览器给网页提供了API来有限度的存储一定的数据,不能随意访问文件系统;

所以就有cookie这样的存储系统,还有Lockstorage和indexDB,但是cookie仍然是主流;

过程:HTTP中的cookie字段就会把本地存储的信息发送给服务器1,然后服务器就会就会通过HTTP中set-cookie字段给浏览器反馈保存哪些数据;

重要的结论:

cookie从哪里来:即服务器返回给浏览器的,每次登录成功后

cookie去哪里:cookie会存储在浏览器本地的磁盘上,每次访问服务器都会带上cookie

cookie的存储格式:这里的数据是以键值对的形式进行存储的,具体内容是程序员自定义的

cookie的作用:作为身份标识,每次访问服务器带上cookie就是告诉服务器自己是谁

cookie浏览器中如何进行存储:即通过访问的不同域名的维度进行存储,并且是硬盘本地保存

 3.总结

本期由于篇幅太长,http的相关的内容还没有完全介绍,主要是讲解了HTTP的报文简单介绍,以及UPL的认识,URL encode,以及比较常见的方法和比较重要的报头结构中的一些重要的概念;小编会在下期进行剩下的HTTP的知识讲解,以及HTTPS的开头;

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                 😊😊  期待你的关注~~~

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

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

相关文章

【MyBatis源码】CacheKey缓存键的原理分析

文章目录 Mybatis缓存设计缓存KEY的设计CacheKey类主体CacheKey组成CacheKey如何保证缓存key的唯一性 Mybatis缓存设计 MyBatis 每秒过滤众多数据库查询操作&#xff0c;这对 MyBatis 缓存键的设计提出了很高的要求。MyBatis缓存键要满足以下几点。 无碰撞&#xff1a;必须保证…

面试题:JVM(二)

1. 面试题 简述 Java 类加载机制?&#xff08;百度&#xff09; JVM类加载机制 &#xff08;滴滴&#xff09; JVM中类加载机制&#xff0c;类加载过程&#xff0c;什么是双亲委派模型&#xff1f; &#xff08;腾讯&#xff09; JVM的类加载机制是什么&#xff1f; &#x…

数据库的使用02:SQLServer的连接字符串、备份、还原、SQL监视相关设置

目录 一、连接字符串 【本地连接字符串】 【远程连接字符串】 二、备份 三、还原 &#xff08;1&#xff09;还原数据库-bak、btn文件 &#xff08;2&#xff09;附加数据库mdf文件 四、SQL监视器的使用 一、连接字符串 【本地连接字符串】 server DESKTOP-FTH2P3S; Da…

【2024工业图像异常检测文献】UCAD: 使用对比学习提示的无监督连续异常检测方法

Unsupervised Continual Anomaly Detection with Contrastively-learned Prompt 1、Background 无监督异常检测&#xff08;UAD&#xff09;专注于在没有先验知识或标记实例的情况下识别数据中的不寻常模式或异常值&#xff0c;仅依赖于“正常”数据的内在分布&#xff08;Cha…

【算法】Floyd多源最短路径算法

目录 一、概念 二、思路 三、代码 一、概念 在前面的学习中&#xff0c;我们已经接触了Dijkstra、Bellman-Ford等单源最短路径算法。但首先我们要知道何为单源最短路径&#xff0c;何为多源最短路径 单源最短路径&#xff1a;从图中选取一点&#xff0c;求这个点到图中其他…

[C++]——哈希(附源码)

目录 ​编辑 ​编辑 一、前言 二、正文 2.1 unorder系列关联式容器 2.1.1 unordered_map 2.1.1.1 unorderer_map的介绍 ①unordered_map的构造 ②unordered_map的容量 ③unordered_map的迭代器 ④unordered_map的元素访问 ⑤unordered_map的查询 ⑥unordered_map的修改操…

使用Ubuntu快速部署MinIO对象存储

想拥有自己的私有云存储&#xff0c;安全可靠又高效&#xff1f;MinIO是你的理想选择&#xff01;这篇文章将手把手教你如何在Ubuntu 22.04服务器上部署MinIO&#xff0c;并使用Nginx反向代理和Let’s Encrypt证书进行安全加固。 即使你是新手&#xff0c;也能轻松完成&#xf…

Maven 下载配置 详解 我的学习笔记

Maven 下载配置 详解 我的学习笔记 一、Maven 简介二、maven安装配置三、maven基本使用四、idea配置mavenidea配置maven环境maven坐标idea创建maven项目配置Maven-Helper插件 五、依赖管理 一、Maven 简介 Apache Maven 是一个项目管理和构建工具&#xff0c;它基于项目对象模型…

一文带你了解,全国职业院校技能大赛老年护理与保健赛项如何备赛

老年护理与保健&#xff0c;作为2023年全国职业院校技能大赛的新增赛项&#xff0c;紧密贴合党的二十大精神&#xff0c;致力于加速健康与养老产业的蓬勃发展&#xff0c;并深化医养康养结合的服务模式。此赛项不仅承载着立德树人的教育使命&#xff0c;更通过竞赛的引领作用&a…

STM32ZET6-USART使用

一、原理说明 STM32自带通讯接口 通讯目的 通信方式&#xff1a; 全双工&#xff1a;通信时可以双方同时通信。 半双工&#xff1a;通信时同一时间只能一个设备发送数据&#xff0c;其他设备接收。 单工&#xff1a;只能一个设备发送到另一个设备&#xff0c;例如USART只有…

电话语音机器人,是由哪些功能构成?

电话语音机器人是自动电话销售、筛选意向客户的&#xff0c;只要录入好行业话术&#xff0c;导入要拨打的手机号&#xff0c;机器人就可以上岗工作了。 电话语音机器人组成部分&#xff1a; 1、语音识别器&#xff0c;主要作用&#xff1a;识别客户讲话内容&#xff0c;从而做…

理解 WordPress | 第二篇:结构化分析

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣&#xff0c;点个关注吧&#xff0c;防止迷路。 WordPress 的内容和功能结构可以按照层级来划分&#xff0c;这种层次化的…

vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由

vue3项目history模式部署404处理&#xff0c;使用 historyApiFallback 中间件支持单页面应用路由 在现代的 web 开发中&#xff0c;单页面应用&#xff08;SPA&#xff09;变得越来越流行。这类应用通常依赖于客户端路由来提供流畅的用户体验&#xff0c;但在服务器端&#xf…

计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

PHP电商供应链ERP管理系统小程序源码

&#x1f680;电商供应链大揭秘&#xff01;ERP管理系统如何重塑你的商业版图✨ &#x1f50d; 什么是电商供应链ERP管理系统&#xff1f; 电商供应链ERP管理系统是一款基于FastAdminThinkPHP开发的系统。该系统可满足电商企业管理自身进销存&#xff0c;帮助中小型电商企业管…

全参微调与LoRA的区别,及7种LoRA变种方法解析

随着LLM的发展和应用&#xff0c;在LLM的预训练模型基础上做微调&#xff0c;使其适用于自己的业务场景的研究越来越多。与全参数SFT相比LoRA是在冻结LLM本身参数的基础上&#xff0c;在旁路增加两个可学习的矩阵&#xff0c;用于训练和学习&#xff0c;最后推理是LLM输出和可学…

ubuntu工具 -- ubuntu服务器临时没有网络,急需联网下载东西怎么办? 使用手机提供网络

问题 ubuntu服务器配置经常遇到临时需要网络下载文件需求, 通过有线连接又来不及 解决方法 使用手机usb为ubuntu服务器提供网络 先在ubuntu上运行 ifconfig 查看当前的网络接口, 一会看看多了哪个网口 1. 手机端操作 先使用usb数据线将手机连接到服务器上 打开手机的usb共享…

一文快速预览经典深度学习模型(一)——CNN、RNN、LSTM、Transformer、ViT

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要简要并通俗地介绍了几种经典的深度学习模型&#xff0c;如CNN、RNN、LSTM、Transformer、ViT&#xff08;Vision Transformer&#xff09;等&#xff0c;便于大家初探深度学习的相关知识&#xff0c;并更好地理解深度学…

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结