HTTP 协议的基本格式

news2024/11/26 14:48:19

HTTP

什么是HTTP?HTTP是应用层的一个重要协议.它定义了浏览器怎样向服务器请求文件,以及服务器怎样把文件传送给浏览器.

我们打开浏览器,手动输入一个网址:baidu.com.那么此时浏览器就会给百度的服务器发送请求.百度服务器在返回一个html的响应.
在这里插入图片描述

那么我们如何学习HTTP协议呢?通过它的协议报文格式,我们就能看到HTTP具体是什么样子的了。

HTTP的报文协议格式

学习HTTP的报文格式,需要通过一个抓包工具来实现.
那么抓包工具是什么呢?

一. 抓包工具

抓包工具的本质就是一个代理,简称跑腿的.比如A想喝楼下茶百道奶,让给他买.B此时充当的角色就是代理。
在这里插入图片描述

由于B是那个替别人执行任务的,所以非常清楚任务的具体执行过程。
我们引入抓包,就是为了获取想要的原始数据。

我们推荐使用Fiddler来实现http的抓包。

Fidder的使用详解

左右结构

  • 左侧:抓到的包的列表(注意,它是一直在持续的)

  • 右侧:双击找到的包,会出现这个包的详情页。右上:请求 右下:响应
    在这里插入图片描述

二.HTTP请求

双击右上的Raw,就可以看到原来的格式,然后点击view in notepad.就可以通过记事本来打开啦!
下图就是一个完整的HTTP请求:
在这里插入图片描述

HTTP请求的组成部分

  1. 首行
    在这里插入图片描述
    2.Header
    在这里插入图片描述

3.空行
在这里插入图片描述
Header的结束标记
4.正文
body (可有可没有)

下面我们着重介绍四个部分的首行和请求头Header部分

1.首行

HTTP方法

HTTP有很多方法,其中比较重要的有两个:

  • get 请求

  • post请求
    在这里插入图片描述

它们都是客户端向服务器发送请求的方法

get和post的区别
本质上没有室内区别,但是在方法的使用上有些不同.
1.get用来表示“获取一个数据”,post表示“提交一个数据”;
2.get没有body,需要携带数据的话要放入URL中。而Post有body;
3.get是幂等的;=,post无要求;
(幂等就是输入一定,输出也一定。这样只要是同一个输入,就会有同一个输出!!!)
4.get可以缓存,post不可以;
(缓存是建立在幂等的基础之上的,因为输入一定,输出也一定。所以我们可以把输出缓存起来。这样只要是同一个输入。服务器就不用计算了,直接返回缓存中的结果)
5.get可以被浏览器收藏,post不可以。

URL

唯一资源定位标识,描述了网络上的一个唯一的资源。

在这里插入图片描述
如果觉得很抽象的话!我们可以举一个生活中的例子,便于理解。
假设我们要去重庆工商大学的18窗口吃重庆小面:
那用URL来表示就是:
http://重庆工商大学3食堂:18//重庆小面/豌杂面?葱=不要&辣椒=微辣&香菜=不要
服务器地址:重庆工商大学
端口号:18
访问资源:重庆小面的豌杂面
补充说明:不要葱微辣不要香菜.

注:查询字符串是有键值对组成的。&分割键值对,=分割键和值。

版本号

HTTP的版本号有:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
最新版本:HTTP/3
最常用版本:HTTP/1.1

2. 请求头Header

键值对结构。每个键值对都是一行;键和值之间采用: (冒号+空格)分割

在这里插入图片描述
空行结束。

Host

描述了浏览器要访问的服务器是谁(地址+端口号)

与URL的区别:
URL中存放的是当前目标,Host中存放的是最终目标。

content-Type和content-Length
  • content-Type

描述body的数据格式

作为请求的写法:

在这里插入图片描述

通过form表单提交数据,body的格式和查询字符串(querry String)一样,也就是url中的查询字符串的格式:username=cy&password=gw520

在这里插入图片描述数据格式是json,字符集是utf-8

{
username:cy;
password:gw520;

}

  • content-Length

描述body的数据长度

在这里插入图片描述

这两个属性是跟着body走的,所以只有请求是Post时,才会出现.

User-Agent(UA)

主要描述系统和浏览器是什么版本。

在这里插入图片描述
作用:
UA在早年互联网行业还未发展起来的时候,是用来区分各种上网设备的(不同的型号等),不同的上网设备能支持的功能不同。
而如今,随着互联网的快速发展,浏览器之间的区别以及非常小了,UA存在的价值就是区分用户是手机端、PC端还是平板。

referer

表示这个页面是从哪个页面跳转过来的。

比如我在百度搜索肖战。
此时的referer表示当前页面是从百度页面跳转过来的:

在这里插入图片描述*

Cookie

俗称小饼干,也是由键值对组成的。它是浏览器在本地存储用户自定义数据的一种重要机制。


数据都是存储在服务器的,浏览器也需要存储数据吗?是的。
浏览器要存储数据,比如用户信息。那么它如何存储呢?直接访问硬盘文件吗?不可以,如果允许网页访问文件系统的话,如果有不良网页篡改我们硬盘中的某些数据,后果将不堪设想!!!
所以为了保证网络安全,浏览器会限制网页访问我们的文件系统。
既然浏览器阻止网页访问文件系统,又想要存数据。该如何实现呢?Cookie机制!
浏览器通过Cookie机制,允许网页往浏览器这边写入一些自定义的键值对。这些数据通过浏览器的api,写入特定的文件(往指定位置存储指定文件)。

  1. Cookie从哪儿来

从服务器来。当浏览器访问服务器时,服务器会返回一个HTTP响应,响应中的set-Cookie字段就包含了Cookie键值对。

在浏览器搜索baidu.com,通过抓包工具进行抓包,找到这个包,点击响应,打开:
在这里插入图片描述
再次打开浏览器,就可以看到浏览器存储的数据了。
在这里插入图片描述

  1. Cookie到哪里去

浏览器保存之后,后续再访问服务器,就会带上Cookie。

  1. Cookie有什么用

浏览器本地存储数据的机制。最主要的作用就是存储用户登录信息。当再次访问服务器,带上Cookie,服务器就能知道是哪个用户。

例1:我们登录 QQ邮箱,此时浏览器会记住用户登录信息,服务器根据这个用户登陆信息,返回这个用户信息的数据(比如收件箱,草稿箱等等)。我们再去点击收件箱,就不用重新登录了,会直接出来这个这个用户对应的页面。
例2:cookie有点像我们平时的校园卡,校园卡里存储了每个学生的信息,姓名,学号,余额等等。当我们刷校园卡出入校门,系统就能通过校园卡识别信息。确认是本校学生,就可以进门了。

三.HTTP响应

HTTP响应的组成部分

像HTTP请求一样,先点击Raw,再点击使用记事本打开。可以发现,是一个二进制文件!这是由于此时打开的是一个HTTP响应的压缩文件。我们可以点击这个:
在这里插入图片描述

打开,就可以看到解压过后的文本文件了。
如下图是一个完整的HTTP响应:

在这里插入图片描述
HTTP响应也可以分成四个部分:
1.首行

在这里插入图片描述
2.响应报头(Header)
在这里插入图片描述

3.空行
在这里插入图片描述

4.正文
(此处是一个HTML代码在这里插入图片描述
HTTP响应与HTTP请求的组成部分差不多,重点了解HTTP响应首行中的状态码代表什么意思就可以了.

HTTP状态码

表示此次请求是成功还是失败,用数字表示.

在这里插入图片描述
比较经典的错误::
200:表示请求成功
301:永久重定向
302:临时重定向
404:表示访问的资源不存在
403:表示访问被拒绝(没有权限)
500:服务器内部错误
504:服务器访问超时

总结

HTTP协议报文格式:
在这里插入图片描述

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

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

相关文章

【系统移植】uboot 通过 NFS 加载根文件系统(二) —— 修改环境变量 bootcmd、bootargs

上一部分已经配置好了网络环境,我们要修改环境变量以保证开发板可以正常启动,uboot 环境变量中比较重要的环境变量就是 bootcmd 和 bootargs 目录 1、修改自启动命令 — bootcmd 2、修改自启动参数 —— bootargs (1) root/dev/nfs rw (2) nfsroot …

Godot引擎 4.0 文档 - 循序渐进教程 - 创建你的第一个脚本

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Creating your first script — Godot Engine (stable) documentation in English 创建你的第一个脚本 在本课中,您将编写您的第一个脚本,使用…

Datacom-HCIE 题库 02(10月26日更新)--含解析

单选题 1.[试题编号:189785] (单选题)如图所示,VTEP1上在BD20域内开启了ARP广播抑制功能,并且VTEP1通过 BGP EVPN路由学习到了PC2的ARP信息,则PC1发送的针对PC2的ARP请求,VIEP1在转发给VIEP2时…

设备采购信息管理系统

系列文章 任务14 设备采购信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试界面展示添加采购信息按编号查找采购信息按设备编号查找…

vue记录鼠标拖拽划过位置并将划过位置变色

首先 我们要做一个这样的基本组件 <template><div><!--循环遍历 List数组用当前下面当做key值然后定义了 onDragStart 鼠标拖动时触发定义 onDragEnd 拖动结束后触发定义 onDragOver 记录所有鼠标拖动经过的位置--><divclass"skeleton"v-f…

DAY 63 mysql的高级语句:存储过程

什么是存储过程 存储过程是一组为了完成特定功能的SQL语句集合。 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来&#xff0c;这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时&#xff0c;只需要调用它即可…

数据结构之堆详解

目录 1.什么是堆 堆的定义 结构体定义与函数接口 堆的初始化 堆的销毁 入堆 向上调整算法 大堆 出堆 向下调整算法 返回堆顶元素 判空 堆的应用 1.什么是堆 知道以上的存储方法&#xff0c;对于完全二叉树&#xff0c;有一个叫做堆的结构&#xff0c;堆本质就是一…

内核调试工具crash使用

内核调试工具crash使用 前言初识获取vmlinuxDwarf Error: wrong version in compilation unit header (is 5, should be 2, 3, or 4) 其他 前言 在编写内核驱动的过程中&#xff0c;时不时就导致内核崩溃&#xff0c;也没啥好的调试方法&#xff0c;要么dmesg打印内核日志&…

socket | 网络套接字、网络字节序、sockaddr结构

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

量化论文学习之《基于 CNN-LSTM 混合模型的股价 预测》

主要原理 CNN-LSTM 混合模型首先使用 CNN 来提取时间序列数据的特征&#xff0c;然 后将特征输入进 LSTM 模型中来进行下一交易日股票收盘价的预测。 数据处理 使用数据 作者发现加入volume,pctChg后效果变差&#xff0c;可能原因是加入了相关性较低的特征后造成了数据冗余…

Ubuntu挂载阿里云盘

目录 所需环境安装docker安装rclone获取阿里云盘token 获取docker镜像并运行获取本机IP信息总结rclone配置挂载网盘到本地文件夹开机启动 所需环境 安装docker 使用官方脚本进行全自动安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh安装r…

Spring Boot 可执行 Jar 包运行原理

Spring Boot 有一个很方便的功能就是可以将应用打成可执行的 Jar。那么大家有没想过这个 Jar 是怎么运行起来的呢&#xff1f;本篇博客就来介绍下 Spring Boot 可执行 Jar 包的运行原理。 打可执行 Jar 包 将 Spring Boot 应用打成可执行 Ja r包很容易&#xff0c;只需要在 p…

数字信号处理基础(一):常用信号产生

目录 1. 写在前面2. 连续信号和离散信号2.1连续信号2.2 离散信号 3. 常用信号的产生3.1 单位脉冲序列3.2 单位阶跃序列3.3 指数函数3.4 正弦信号和余弦信号3.5 sinc函数3.6 矩形脉冲信号 4. 信号卷积5. 完整代码 1. 写在前面 为了更好的理解通信原理系列文章&#xff0c;在此补…

28 SQL——表子查询

create table dept(id int primary key auto_increment,name varchar(15))comment 部门;insert into dept(id, name) values (1,研发部),(2,市场部),(3,财务部),(4,销售部),(5,总经办),(6,人事部);create table staff (id int primary key auto_increment commentID,name …

使用Mathtype公式编辑器生成CSDN中的数学公式

使用Mathtype公式编辑器生成CSDN中的数学公式 在CSDN中输入数学公式&#xff0c;直接使用LaTeX编辑输入公式有一些难度&#xff0c;如果你熟悉Mathtype公式编辑器&#xff0c;那么在CSDN文档中输入数学公式也变的相对容易。 下面我们举例说明使用Mathtype转换输入CSDN的公式。…

Weex工具链的奥秘

在2017年1月12日 Weex Conf 2017上&#xff0c;来自阿里的卜道依据Weex开发中的痛点介绍了Weex的打包和插件机制&#xff0c;同样来自阿里的归影介绍了Weex的调试工具Devtools&#xff0c;共同揭秘了Weex的工具链。本文是卜道和归影关于Weex工具链实践的分享整理。 Weexpack与…

MyBatis各种类型查询数据的数据绑定

文章目录 1、前言2、查询一个实体类对象字段名和属性名无法映射处理方式一&#xff1a;起别名方式二&#xff1a;使用全局配置文件配置映射规则方式三&#xff1a;自定义resultmap 3、查询一个list集合4、查询单个数据5、查询一条数据为map集合6、 查询多条数据为map集合方式一…

Python中使用Scipy模块中root函数求解非线性方程的解法举例

Python中使用Scipy模块中root函数求解非线性方程的解法举例 Python中的SciPy模块功能强大&#xff0c;下面举例说明使用该模块求解非线性方程或非线性方程组。在求解时候&#xff0c;用到scipy.optimize模块中的root函数。 1.root函数的调用格式 调用它们的格式为 from scipy…

使用MinIO文件存储系统【完成视频断点续传】业务逻辑

目录 视频上传 接口一&#xff1a;检查该视频/媒资文件是否已经上传完成 接口二&#xff1a;检查视频分块是否已经在minio中已经存在 接口三&#xff1a;上传分块文件到minio中&#xff08;已经上传的分块会在接口二进行校验&#xff09; 接口四&#xff1a;合并上传的分块…

git生成密钥方法

1、密钥生成 打开Git Bash&#xff0c;查看ls ~/.ssh下是否有密钥文件id_rsa*&#xff0c;有的话可先进行备份。 然后用如下命令生成新密钥&#xff1a; ssh-keygen -t rsa -C "your_emailexample.com" 参数含义&#xff1a; -t 指定密钥类型&#xff0c;默认是 …