
- 🏠 博客主页:小谢同学的小破站
- ✍️ 本文由 小谢同学的小破站 原创,首发于 CSDN💻
- ☕ Java学习专栏:java
- 📗 MySQL专栏:MySQL
- 🧩 数据结构与算法:Java 数据结构与算法
- 🌐C语言专栏: C语言
- 👍 欢迎点赞👍 收藏⭐ 留言📝,发现错误欢迎指正!
- ✨ 脚踏实地,持续深耕,奔赴自己的目标✨ – – – – – 💫分割线💫———-
Fiddler与HTTP 协议报文格式
- 1. 抓包工具
- 1.1 下载Fiddler 抓包工具
- 1.2 Fiddler 基础实操步骤
- 1.3 抓取:HTTP 协议
- 2. HTTP协议
- 2.1 HTTP 请求报文基本格式
- 2.2 HTTP 响应报文基本格式
- 2.2.1 HTTP 常见的键值对
- 2.3 网络中关于HTTP中不太准确的说法
前言: 这里是小谢同学有关于Fiddler和HTTP协议的一些相关见解,整理了有关于工具的使用与HTTP协议笔记。笔记用于自我复盘巩固,有错误欢迎大家指出,专栏还有 Java、网络、C 语言系列笔记欢迎翻阅.
1. 抓包工具
抓包工具介绍:
1.1 下载Fiddler 抓包工具
Fiddler 是一款免费工具,优先从官方网站下载,避免第三方捆绑安装包 => Fiddler官方下载地址
完善个人信息之后,就可以点击下载~ 注意: 如果点击没有任何反应,可以使用当前连接下载=> FiddlerSetup.exe 安装流程:
刚装好的Fiddler是大概率是不会抓到HTTP数据包的,此时我们需要手动配置证书
配置过程:


全部完成之后,就可以去尝试抓包: 
Fiddler 查看报文的常用面板
- Raw:展示完整、未经加工的 HTTP 原始报文。
- Headers:展示请求头 / 响应头的键值对,方便快速浏览头字段。
- TextView:纯文本形式展示报文正文。
- SyntaxView:带语法高亮展示正文代码,可读性更高。
- 其余面板(WebForms、Cookies、JSON 等)为专项视图,后续学到对应知识点再使用
返回目录
1.2 Fiddler 基础实操步骤
打开软件,左下角Capturing文字亮起,就代表已经开启抓包;点击一下文字就关闭抓包。
查看原始报文: 双击其中一条抓到的包就进入了Inspectors(选项卡)位置:
- 上半区域:Request(客户端发给服务器的请求),选择Raw标签查看未经格式化的原始报文
- 下半区域:Response(服务器返回给客户端的响应),同样选择Raw查看完整响应报文

最常用: 按域名过滤:
打开Filters标签页,勾选Use Filters,可以根据域名过滤,只抓取目标网站请求,可以避免大量无关数据包干扰; 点击Filters
打开后找到板块:Hosts
下拉说明:
- -No Host Filter‑:不过滤域名,显示全部流量
- Show only traffic to Hosts:仅显示列表中的域名
- Hide traffic to Hosts:隐藏列表中的域名
按 URL 网址关键字过滤(Request Headers 板块)
如果只想抓取网址中包含某个文字的请求才会使用URL关键字过滤; 找到板块:Request Headers 勾选:Show only if URL contains 在右侧输入框填写关键词,例如:baidu
Hide if URL contains:填入关键词,隐藏包含该文字的请求 效果:只要请求 URL 里面包含baidu文字就会被展示出来。
按响应状态码过滤(Response Status‑Code 板块)
用来筛选 / 隐藏成功、重定向、报错请求
- Hide success(2xx):隐藏 200 成功的请求
- Hide redirects(300,301…):隐藏重定向请求
- Hide non‑2xx:隐藏所有非 200 的请求
过滤文件类型(Response Type and Size 板块)

- Block image files:会拦截图片资源的请求
- Block CSS files:会拦截 css 样式的文件
返回目录
1.3 抓取:HTTP 协议
例如:我们想要抓CSDN的包:
填写好我们想要的参数之后,我们就可以在软件左侧看见有关于CSDN的HTTP协议相关的包;
双击点开其中一个HTTP包,再次点击Raw,此时我们就能看见当前HTTP报文的格式; 
返回目录
2. HTTP协议
HTTP 全称超文本传输协议,是互联网应用最广泛的应用层协议,底层基于 TCP 协议传输,是一种: 一问一答的客户端‑服务器模式。
- 客户端(浏览器)发出:HTTP 请求报文
- 服务器返回:HTTP 响应报文
正如我们输入一个网址(URL)的时候:我们客户端给服务器发送请求,服务器返回一个页面给我们客户端
2.1 HTTP 请求报文基本格式
一条完整的 HTTP 请求报文由四部分组成:请求行、请求报头、空行、请求正文
请求行:请求方法 + URL + HTTP版本
方法:
| GET | 获取资源 | 1.0、1.1 |
| POST | 传输实体主体 | 1.0、1.1 |
| PUT | 传输文件 | 1.0、1.1 |
| HEAD | 获得报文首部 | 1.0、1.1 |
| DELETE | 删除文件 | 1.0、1.1 |
| OPTIONS | 询问支持的方法 | 1.1 |
| TRACE | 追踪路径 | 1.1 |
| CONNECT | 要求用隧道协议连接代理 | 1.1 |
| LINK | 建立和资源之间的联系 | 1.0 |
| UNLINE | 断开连接关系 | 1.0 |
红色部分为日常开发中见到的最多(GET 与 POST 就相当于曹植,就像谢灵运所说: 天下之才共八斗,曹植独占七斗,我谢灵运得一斗。)绝大多数业务都是由get与post包揽
| 主要作用 | 创建、新增资源 | 更新、替换已有资源 |
| 幂等性 | 非幂等,发两次就创建两条数据,每次结果都不同 | 幂等,发多少次结果都一样 |
| URL设计 | 访问集合地址 /user | 访问具体资源 /user/1001(带上id) |
| 例子 | 注册账号、发一条新朋友圈 | 修改id=1001用户的昵称 |
| 浏览器普通网页 | 表单非常常见 | 普通网页几乎见不到,多用于后端接口 |
- HTTP开发者的建议是让程序员遵从这种开发准则,但是没有对其做出限制,就导致了现在获取/上传/删除等等业务都能使用get来实现
从而引出了一个面试中常见的问题:get与post有什么区别?
日常使用中本质上没有"本质区别",能用get的地方,post也能用,能用post的地方,get也能使用; 但是在使用习惯上还有一定的区别:
- get通常用来表示"获取数据",而`post``通常用来"提交数据"
- get通常把给服务器的数据放到query string中,而post则通常放到body中;
URL

解释:
引出了新的问题:如果发送给的query string中,服务器在进行解码的时候,不小心解码成特殊符号了怎么办?
类似于此处就使用了转码: 
空行:用来标记头部字段结束、正文(实体主体)开始。

请求正文: 客户端发给服务器,位于 HTTP 头部空行之后的数据内容。
返回目录
2.2 HTTP 响应报文基本格式
响应报文同样分为 4 个部分:状态行、响应头、空行、响应体
解释:
- 2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务器错误
比较重要的: 404:访问的资源服务器上不存在, 403:表示你没有权限访问当前网站, 405:服务器不支持这个方法, 500:表示服务器挂了, 505:服务器繁忙, 301:永久重定向, 302:临时重定向
重定向概念:重定向就是服务器告诉浏览器:你要访问的资源搬家了,请你重新去访问另一个新的 URL 地址。 它属于服务器的指令,服务器返回一个特殊的状态码 + Location 响应头,浏览器收到之后,会自动发起第二次全新的 HTTP 请求,跳转到新地址
返回目录
2.2.1 HTTP 常见的键值对
常见的键值对有:

- 我们可以认识一个大概: Chrome、Safari、Mozilla、AppleWebKit 这些历史遗留的字符串,属于 UA 的老传统,然后我们能看见Windows版本,以及chrome浏览器也就是现在的(Edge)

- 此处的refere就是当前这个页面是从这个网站跳转过来的(也可以用于广告的统计,每当有一个人点击了这个连接,服务器上就会记录一条refere数据);
拓展:
在早年全网以 HTTP 明文 访问网站的时代(2012‑2015 年,高峰约 2014 年),宽带运营商处在 >>TCP 链路的中间节点。 HTTP 报文没有任何加密,运营商网关可以看见、并且随意篡改请求头里的 Referer 字段。
- 修改 Referer 来源地址,伪装流量来自推广页面
- 骗取平台广告分成佣金
- 导致网站防盗链校验失效
这就导致打广告的人和发布广告的数据对不上,造成损失(后续为了避免这种情况就出现了HTTPS)
常见的格式有:
- text/html:html格式
- text/css:css格式
- application/javascript:javascript格式
- application/json:json格式
网页前端开发:html 网页结构(骨),css网页样式(皮),javascript 网页行为(魂)->服务器保存了这些代码文件浏览器通过http请求,获取到这些代码文件下载到浏览器上,最终由浏览器负责执行
- image/jpg:jpg格式
- image/png:png格式
此时,我们下次进行访问网站的时候就不需要我们重新进行登录~
此处能看见当前网站的一个cookie;返回目录
2.3 网络中关于HTTP中不太准确的说法
1.GET请求一般是实现成“幂等”,POST请求没有“幂等"的要求
这是一种错误的一种说法,HTTP的创造者只是在语法形式上建议get方法实现成幂等,而不是只能实现幂等,当然,post在代码层面上也可以实现成幂等
2.GET请求不安全,POST请求更安全
安全是相对的,不管是使用get实现用户登录,还是用post实现登录都不安全,get实现的登录户名密码一般放在query string中,post实现的登录,户名密码一般放在body,在这种明文传输的情况之下,黑客也能进行抓包获取到对应的账户密码~>都不安全
3.GET请求单次传输的数据量比较小,POST请求单次传输的数据量更大**(GET数据在 URL中,URL的长度有上限(1KB,2KB,10KB,1024KB…)**
在这个时代看来,这个说法也是错误,这个GETURL长度的上限只针对于上古时期IE浏览器对URL的长度有限制,但是在这个时代,GET的一个URL可以有很长
4.针对GET请求只能传输文本数据,POST可以传输文本和二进制数据
二进制数据,可以通过urlencode/base64转化为文本,通过GET的URL来进行传输,但是如果严格意义上GET请求的确不能传输二进制数据
返回目录

网硕互联帮助中心







评论前必须登录!
注册