HTTP协议报文格式详解和抓包那些事

news2024/11/17 9:32:42

文章目录

  • HTTP协议是什么
  • HTTP报文格式
    • 抓包工具fiddler
  • HTTP请求
    • 请求行
      • HTTP方法
      • URL
      • 版本号
    • 请求头
      • HOST
      • Content-Type&Content-Length
      • User-Agent(简称UA)
      • Referer
      • Cookie
  • HTTP响应
    • 状态行
      • 版本号
      • 状态码

HTTP协议是什么

HTTP协议全称为超文本传输协议,是一个被广泛使用的应用层协议,由于HTTP协议的可制定性非常强,所以HTTP被使用的非常广泛。

我们平时打开一个网页就是通过HTTP协议来传输数据的,当我们输入网址(URL)的时候就是向对应浏览器的服务器发送了一个HTTP请求,服务器接收到请求会返回一个HTTP响应,这个响应经过浏览器的解析后最终呈现的内容就是网页的内容。
在这里插入图片描述

HTTP往往是基于传输层的TCP协议实现的,应用层协议关注的是数据干什么用,并不关注数据如何传输,我们将网络通信比作在淘宝买东西,传输层关注的是端到端,也就是我们的发货地址和收货地址是什么,网络层做的是路由选择,也就是从发货地址到收货地址究竟走哪一条路,数据链路层关注的是中间相邻节点如何走,当我们的快递从发货地址到达收货地址后就完了嘛?并没有,我们还需要确定这个快递买来是做什么用的,这是应用层协议所关注的

HTTP报文格式

想要了解HTTP的报文协议格式我们需要借助一些工具,来把HTTP协议给显示出来——抓包工具

抓包工具是什么?我们可以理解为代理,例如我有一个追随我的小弟,现在我想吃冰激凌但是我又不想自己去,这个时候我可以让我的小弟去帮我买冰激凌,此时小弟可以清楚的知道我在干什么,抓包工具跟上述过程类似,浏览器向服务器发送的HTTP请求通过抓包工具发送,服务器返回的HTTP响应也通过抓包工具返回,此时抓包工具可以清楚的看见HTTP的报文格式和内容。

在这里插入图片描述

抓包工具fiddler

抓包工具有很多

1、chrome内置了一个
2、wireshark 功能全面,使用复杂,IP、TCP、UDP、HTTP都可以抓。
3、fiddler 专注于HTTP,使用简单。

工作中常用的是fiddler: fiddler下载地址

下载完成后打开fiddler,首次使用需要一些设置,找到tools下的Options
在这里插入图片描述
在这里插入图片描述
这个设置的大概意思就是让你是否要安装根证书,一定要选择YES,否则卸载重装,因为当前网络上的主要协议都是HTTPS。

如果fiddler使用不了可以检查一下下面两点:

1、没有勾选https,没有安装根证书,此时无法解析https数据,抓包的数据就会少很多
2、与其他的代理冲突了。

在这里插入图片描述
此时左边我们就可以看见所有HTTP请求和响应,双击选中某一个可以查看具体报文内容,右上方是HTTP请求报文内容右下方是HTTP响应报文内容,选择Raw可以查看详细信息。

通过观察我们可以总结出HTTP协议的报文格式
在这里插入图片描述

HTTP请求

请求行

在这里插入图片描述

HTTP方法

这样一串拼接的字符串就是请求行的信息,首先GET是HTTP方法,描述了这个HTTP请求想干什么,不同的方法表示不同的语义,例如GET的语义是从服务器这里,拿一个东西,POST的语义是向服务器里提交一个东西

后面跟着的一长串是URL,最后是版本号。
在这里插入图片描述
一般我们看到的请求大部分都是GET,在登陆或者上传文件的时候可以看见POST,GET语义下一般Body为空,POST语义下一般Body不为空,这两个HTTP方法也是最常用的,虽然语义不同,但在使用时并非需要严格的遵守规则。

这样我们就有了一个非常经典的面试题:GET和POST这两个方法究竟有啥区别

1、首先下定义,并没有本质上的区别,两个方法可以互相替换
2、在使用习惯上存在区别,一般POST表示提交一个数据,GET表示获取一个数据
3、GET通常会设置成幂等的,POST没有要求
4、GET可缓存,POST不可以
5、GET请求可以被浏览器收藏,POST不可以。

幂等的意思就是每次相同的请求都会返回相同的响应,例如我搜索一个10*10的计算结果,此时服务器计算后可以把结果保存下来,下次就不需要在进行计算,返回给浏览器的数据,浏览器也可以存起来,下一次再有这样的请求就不需要发送给服务器了,这样的操作需要建立的幂等的前提下。

URL

URL是唯一资源定位符,描述了网络上的唯一的一个资源。

针对URL来说一般结构大概有这几个部分:
在这里插入图片描述
例如上图的URL:
在这里插入图片描述
剩下后面的一堆键值对结构的我们成为query string 这是一些参数,对请求资源进行细节上的补充,使用&分割键值对,使用=分割键和值。

版本号

HTTP的版本有:HTTP1.0、HTTP1.1、HTTP2.0、HTTP3,目前我们主要使用的HTTP1.1和HTTP2.0,之前讲HTTP协议往往是基于TCP进行传输的,但HTTP3基于UDP进行传输。

请求头

请求头header,键值对结构,每个键值对占一行,键和值之间使用冒号空格来分割。
在这里插入图片描述
下面介绍一下常见的一些属性:

HOST

在这里插入图片描述
这个属性描述了浏览器这个请求要访问的服务器是谁,这里写的不仅仅是地址也可以写端口号。

Content-Type&Content-Length

Content-Type:描述了body的数据格式
Content-Length:描述了body的长度

此时我们这个请求body为空所以没有这两个参数,Content-Type有两种写法可以写成json格式,也可以写成类似于query string的格式。

json
{
“username”: “xxxxx”,
“password”: “xxxxxxxx”
}

query string
username=xxxxx&password=xxxxxxxx

User-Agent(简称UA)

这个属性描述的是用户的客户端使用的是什么样子的
在这里插入图片描述
上述信息有操作系统的版本,浏览器的版本等信息,以前UA的用途是用来区分不同的浏览器,因为不同的浏览器功能不一样,告诉服务器客户使用的是什么浏览器,服务器返回对应的页面,现在浏览器之间的区别越来越小,UA的用途变成了区分手机、PC、平板了。

Referer

这个描述记录了,当前这个页面是从哪个页面跳转来的。

Cookie

在这里插入图片描述
这么长一串看不懂的东西就是Cookie,这里的键值对都是程序员自定义数据,不同的网站功能不一样。

Cookie的本质是浏览器在本地存储用户自定义数据的一种关键机制。

浏览器提供Cookie机制,允许网页往浏览器这边存储一些固定的键值对,这些数据通过浏览器提供的api写入特定的文件中。同一个网站的不同页面共享一个Cookie,不同的网站有不同的Cookie

经典夺命三连问:我是谁?我在哪?我在干啥?

Cookie从哪里来
从服务器来,在HTTP响应里会返回一个Set-Cookie字段给浏览器,此时浏览器收到这个数据,储存在本地。

Cookie到哪里去
回到服务器,会在下次发送请求时发送给服务器,这个数据真正发挥作用实在服务器里。

Cookie有什么用
是浏览器的本地存储数据的机制,可以存任何数据,最经典的就是用户身份信息,由于客户端有很多,每个客户端需要的服务不一样,此时就可以根据Cookie进行区分,每次客户端发送请求时带着自己的Cookie,此时服务器就知道这个客户端时干嘛的了。

HTTP响应

状态行

版本号

版本号与请求相同。

状态码

状态码是一个数字,这个数字是用来表示这次的请求执行是否成功,如果失败,失败的原因是什么?

常见的状态码有:

1、200:表示请求成功
2、404Not Found:表示要访问的资源不存在
3、403Forbidden:访问被拒绝,没有权限
4、500Internal Server Error:服务器内部错误
5、504Gateway Timeout:服务器访问超时了
6、302Move temporarlly:临时重定向
7、301Moved Permanently 永久重定向

重定向的意思就是呼叫转移,就是访问旧的地址,被自动引导到新的地址上。

服务器的状态码大致可以分为:
在这里插入图片描述
剩下的内容响应报头和body正文跟请求都差不多,不在进行赘述了。

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

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

相关文章

【dfs之 迭代加深】【dfs层序遍历】【dfs和bfs的缺点结合解决 就是 迭代加深】加成序列

迭代加深 DFS,BFS和迭代加深的联系与区别例题1. 加成序列普通思想:优化方法: DFS,BFS和迭代加深的联系与区别 DFS: DFS算法是沿着搜索树的根节点,一直遍历完该搜索树之后再回溯继续搜索的一种算法。缺点是…

python读取excel数据并用双y轴绘制柱状图和折线图,柱子用渐变颜色填充

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

体验css:repeat和grid

文章目录 一、repeat1. 语法2. auto-fill和auto-fit3. 专属尺寸① fr② auto③ max-content④ min-content 二、grid1. 设置grid布局2. 设置列宽行高3. 设置间距4. 设置分区5. 设置布局排列顺序6. 设置单元格内容对齐方式7. 设置整个网格对齐方式8. 设置隐式网格大小9. 设置网格…

geoserver图层样式的多种配置方法

前言:用geoserver发布服务的图层一般都配置了样式,简单的或者复杂的;单一的或者渐进式的等。今天我们结合业务场景、依据具体的数据分析给图层配置样式的多种方式。接着前几篇博客用到的数据为例: 一、配置默认样式 点击此篇文章…

Vue中展示中文名称

我今天调用接口时发现列表展示的楼栋一直是数字,并不是它的中文名称;但是点击编辑获取所属楼栋的下拉框中,又为中文名称,当我选中B栋点击修改之后又变成了B栋对应数字;然后我写了一个根据楼栋id获取对应的中文方法&…

栈与队列的对决:用队列实现栈的2种思路

本篇博客会讲解力扣“225. 用队列实现栈”的解题思路,这是题目链接。 先来审题: 以下是输出示例: 以下是提示和进阶: 这道题有2种思路,分别使用2个和1个队列来实现栈。 准备工作 先来实现队列。由于本篇博客的…

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】 0、前言1、Recurrent Neural Networks循环神经网络2、The Problem of Long-Term Dependencies长期依赖的问题3、LSTM Networks4、The Core Idea Behind LSTMs5、Step-by-Step LSTM Walk Through6、Varian…

Linux--进程(一篇博客让你理解操作系统的底层)

Linux–进程 本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~ 进程目录 Linux--进程一、冯诺依曼体系结构1.1外围设备1.2中央处理器(CPU)1.3存储器(内存)1.3.1什么是内存&a…

【LeetCode20】有效的括号——图解

​ 你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题…

【Java校招面试】实战面经(三)

目录 前言一、简历中项目的难点及解决方案二、讲讲分布式锁的实现三、AQS(Abstract Queued Synchronizer)的原理四、ConcurrentHashMap的原理五、MySQL InnoDB存储引擎中的MVCC解决了什么问题,MVCC的实现原理六、平时怎么创建线程?为什么用线程池&#x…

Red Hat Enterprise Linux (RHEL) 8.8 正式版发布

红帽企业 Linux 8.8 发布 Red Hat Enterprise Linux (RHEL) 8.8 (x86_64, aarch64) Release 请访问原文链接:https://sysin.org/blog/rhel-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023年 5月 16日&…

Java学习路线(5)——数组

一、数组的概念 数组是用来存储一系列同类型数据的内存区域。 二、存储数据 1、静态初始化数组 作用: 定义数组时直接赋值。 格式: 【数据类型[] 变量名 new 数据类型[]{值1,值2…,值n}】 示例: double[] height {172.5,170.1,145.1,152.5,…

java常用工具之Scanner类

目录 简介一、扫描控制台输入1.1nextLine1.2nextInt1.3其他方法 二、扫描文件三、查找匹配项四、小结 简介 Java 的 Scanner 类是一个方便在控制台扫描用户输入的工具类,虽然它也可以扫描文件内容,但我们通常更喜欢它扮演前面的角色,因为扫描…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数(KeyedProcessFunction)1.处理…

【Linux进阶之路】基本权限的理解

文章目录 一.用户1.分类2.su3.su-4.sudo 二.文件1.文件分类2.文件权限3.文件权限的身份4.chmod——改写文件权限第一种方式第二种方式 5.chown——改写文件拥有者身份6.chgrp ——改写文件所属组身份7.umask ——设置权限掩码8.目录权限9.粘滞位——特殊的可执行权限 一.用户 …

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

ES6之生成器

文章目录 前言一、生成器是什么?二、生成器总结 前言 生成器 一、生成器是什么? 生成器就是一个特殊的函数,实现异步编程。格式function *名称(){...} (这个*靠近function写,靠近名称写,或者两边空格都不靠近均正确)…

[比赛简介]Parkinson‘s Freezing of Gait Prediction

比赛链接:https://www.kaggle.com/competitions/tlvmc-parkinsons-freezing-gait-prediction 比赛简介 本次比赛的目标是检测步态冻结(FOG),这是一种使人衰弱的症状,困扰着许多帕金森病患者。您将开发一个机器学习…

YOLO V3 SPP ultralytics 第三节:关于yolo 中cfg的网络配置信息和读取cfg配置文件

目录 1. 介绍 2. 关于yolo的cfg网络配置文件 2.1 关于卷积层 2.2 关于池化层 2.3 关于捷径分支shortcut 2.4 关于route 层 2.5 关于上采样层 2.6 关于yolo层 3. 解析cfg 文件 4. 代码 1. 介绍 根据 第二节 的步骤,生成了属于自己的 my_yolov3.cfg 配置…

Python 墨西哥湾流(gulf stream)可视化

背景介绍 墨西哥湾流和黑潮分别是北半球两支强大的西边界流,墨西哥湾流的流速还要强于黑潮,也是温盐环流的重要组成部分。 引入涡度的概念,将涡度分为两个部分: 1、行星涡度,记为 f f f,与地球自转有关…