欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
🙉你是一名侦探 ! 正在追踪一条条数字化的线索。从简单的网页浏览到复杂的在线交易,每一次点击和滑动背后都隐藏着复杂的数据交换。每一个HTTP请求和响应都像是现场留下的指纹,而Fiddler就是你的放大镜和取证工具。通过这篇博客,你将学会如何通过抓包工具捕捉、分析甚至修改这些“指纹”,不仅能够洞察网络通信的每一个细节,还能够在必要时进行干预。无论你是学习者还是应用者,这些技能都将是你的宝贵财富。
让我们立刻启程,一探HTTP协议的奥秘,掌握Fiddler这一强大的网络抓包工具,让你成为网络通信的高手。
目录
HTTP是什么
HTTP协议工作过程/抓包
抓包工具Fiddler
版本选择
下载事项
抓包原理
使用Fiddler抓包
HTTP请求/响应
请求格式
响应格式
协议格式总结
HTTP是什么
🥝HTTP全称为 "超文本传输协议" ,是一种应用最广泛的 应用层协议 (没有之一)
🍎 “超文本”的含义,就是传输的内容不仅仅是文本(比如html, css等文本),还可以是一些其他的资源,比如图片,视频,音频等二进制的数据。使用浏览器浏览网页,使用各种APP客户端,甚至服务器之间的相互调用,大概率也是使用HTTP协议。
HTTP协议诞生于1991年,目前互联网上能见到的HTTP协议,绝大部分都是HTTP/1.1版本(基于TCP),而目前最新的版本是HTTP/3.0(基于UDP),还没有大规模商用。
为什么目前仍然在使用古早的版本,原因也很简单,那就是1.1版本也很好用,仍然满足目前互联网的大部分需求,而升级的成本却是比较高的(浏览器/服务器的兼容性),所带来的收益也有限。有IPv4升级到IPv6的那种既视感。
🫐我们平时在浏览器上打开一个网页,就是使用HTTP协议来传输数据的。
这里的https,可以认为是http的升级版,区别在于https引入了“加密层”,安全性更高。除此之外,https与http完全一样的了~~ (HTTPS详细内容会在后续的博客中展开)
🍓HTTP是典型的“一问一答模型”的协议,客户端发送一个请求,服务端就返回一个响应。打开网页这种场景就是典型的一问一答模式。
HTTP协议工作过程/抓包
🥑当我们在浏览器中输入一个"网址"(URL)时,浏览器就给该"网址"的服务器发送了一个HTTP请求,服务器再返回一个HTTP响应。 这个响应结果被浏览器解析之后,就展示成我们看到的页面内容。(这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应,这些响应里就包含了页面HTML, CSS, JavaScript, 图片,字体等信息)。
🍑事实上,当我们访问一个网站的时候,可能涉及不止一次的HTTP请求/响应的交互过程。 可以通过浏览器的开发者工具观察到这个详细的过程。 通过F12调用开发者工具,切换到Network/网络标签页。然后刷新页面即可看到如下图效果。每一条记录都是一次HTTP请求/响应。这个过程就叫做 "抓包",我们需要通过抓包来观察HTTP的请求/响应情况。
抓包: 把通过自己网卡上的数据获取到并且解析显示出来~
🥥Chrome/Edge浏览器自带的开发者工具很好用,但是不能看到HTTP的原始报文数据,不适合我们学习HTTP协议。所以我们需要更加趁手的工具/代理。
抓包工具Fiddler
🍍经典的! 功能强大的抓包工具 : https://www.telerik.com/fiddler/
版本选择
🙉最新版,全平台支持! (但是收费!!!)
🙉经典版,功能足够强大,足够使用! (免费!!!)
下载事项
1) 确保你的电脑上退出了其他的代理软件。Fiddler也是代理软件,可能会和其他代理冲突,导致不能正确运行,例如VPN/浏览器插件...很可能会和Fiddler冲突,只需退出即可,不用卸载!
2) 由于当前互联网上大部分网页都是HTTPS,需要开启Fiddler的HTTPS功能(一次性操作)。
"证书" 也会在后续的HTTPS博客中详细展开~
抓包原理
🍊Fiddler相当于一个“代理”
🍉浏览器访问网页时,就会把HTTP请求先发给Fiddler,Fiddler再把请求转发给该网页的服务器。当服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。 因此Fiddler对于浏览器和服务器之间交互的数据细节,都是非常清楚的。
代理就可以简单理解为外卖小哥。外卖小哥取到对应的餐品,再把餐品交到你手上。这个过程中,外卖小哥对于“你”和“商家”之间的交易细节,是非常清楚的。
使用Fiddler抓包
🍇安装并且设置完毕以后,只需要启动Fiddler,抓包工作就自动开始了~~
1) 左侧是抓到的 HTTP 数据报的列表
🥝启动Fiddler之后,虽然没有进行什么操作,但还是看到Fiddler进行了很多的抓包操作,这是因为电脑中的某些网络相关进程在后台不停和服务器进行交互,这是正常的。
在进行需要的抓包操作之前,我们可以选中任意一个数据报,Ctrl + A 全选,用Delete删除,再进行我们需要的操作,就会方便我们更快速的找到目标。
2) 点击一个数据报
右侧上方是请求的详情。
右侧下方是响应的详情
3) 请求和响应的上方都会有对应的标签排
🍎点击Raw,转换为查看原始报文数据
🫐点击View in Notepad,使用记事本打开,可以详细查看报文
🍓我们看到的部分报文可能会是二进制并且是压缩过的,这样做的目的是减少传输时消耗的带宽,带宽是互联网中最贵的硬件资源,比CPU、内存贵得多。
这些返回的响应数据解压之后,其实就是网页的HTML,大多数网页如此。
在Fiddler开启后,浏览器会多了一层处理,可能导致网页加载变慢。
HTTP请求/响应
请求格式
1) 首行 : [方法] + [url] + [版本]
2) 请求头(header) : 从第二行开始的若干行,一直到空行结束
🥑每一行都是一个键值对,键和值之间使用 ":(空格)" 分割
🍑HTTP中,请求头的键值对是HTTP标准规定的,不同的请求头都有特定的含义,标准也允许用户自定义一些请求头。
3) 空行:请求头的结束标记。
4) 正文(body):有的请求中有body,而有的则没有;
一般来说在HTTP中,GET请求往往不带body,POST请求往往是带body!
HTTP请求的基本格式 :
1) 首行 2) 请求头 3) 空行 4) 正文
响应格式
🥥与请求所对应,基本格式非常相似,也分为四个部分
1) 首行 : [版本号] + [状态码] + [状态码解释]
200 是最常见的状态码,表示成功。
2) 响应头(header):请求的属性,冒号加空格分割的键值对;每组属性之间使用\n分隔;遇到空行表示header部分结束。
🍍有的键值对出现在请求中,有的出现在响应中,有的则都会出现。
3) 空行
4) 正文(body):对于响应来说,正文通常是HTML/CSS/JS/JSON/图片/音频/字体...... 体现了服务器给浏览器返回的数据。
HTTP响应的基本格式:
1) 首行 2) 响应头 3) 空行 4) 正文
协议格式总结
问题:
为什么HTTP报文中要存在"空行"?
因为HTTP协议并没有规定报头部分的键值对有多少个。空行就相当于是"报头的结束标记",或者是"报头和正文之间的分隔符"。 HTTP在传输层依赖TCP协议,TCP是面向字节流的。如果没有这个空行,就会出现"粘包问题"。
关于粘包问题,可以浏览这篇博客 :TCP(下):三次握手四次挥手 动态控制_tcp 挥手动作-CSDN博客
以上就是本系列博客(上)篇的全部内容。与URL、method、Cookie、状态码、构造请求等相关内容,将会在后续博客中展开,还请多多支持。
不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144024618?spm=1001.2014.3001.5501
希望这篇博客能为你理解HTTP协议以及使用Fiddler抓包提供一些帮助
如有不足之处请多多指出
我是高耳机