学习Fiddler的前置知识
B/S架构
- B/S架构即浏览器和服务器架构模式
编写程序部署到Web服务器
web服务器运行在服务器上,绑定ip地址并监听某端口,接受和处理http请求
客户端通过http协议h获取服务器上的网页、文档等资源
HTTP协议
-
Hyper Text Transfer Protocol (超文本传输协议)
-
用于从万维网服务器传输超文本到本地浏览器的传送协议
-
http协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务
端的数据传输协议,最初是用来客户端传输HTML页面的内容,默认端口是80
-
http是基于请求与响应模式的,无状态的、应用层的协议
HTTP协议的主要特点
1.支持客户/服务器模式
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。 请求方法常用的有GET、HEAD、POST。 每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单, 使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接: 无连接的含义是限制每次连接只处理一个请求。 服务器处理完客户的请求, 并收到客户的应答后, 即断开连接。 采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
完整的HTTP协议
- 完整的HTTP协议包含请求和响应两块内容
HTTP报文
1、报文: HTTP在 应用层 交互数据的方式 (网络中交换和传输的数据单元)
2、HTTP的报文分为:请求报文 & 响应报文
HTTP请求报文
- HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。

请求头
Accept:用于告诉浏览器,客户机支持的数据类型
Accept-Charset:用于告诉服务器,客户机采用的编码
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机的语言环境
Host:客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Refer:客户机通过这个头告诉服务器,他是从哪个资源来访问服务器的(用于防盗链)
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
Authorization: 客户端提供给服务端,进行权限认证的信息
Cookie:客户机通过这个头可以向服务器带数据
HTTP响应报文
- HTTP响应报文由四部分组成:状态行、响应头 、空行、响应体

响应头
Location:这个头配合302状态码使用,用于告诉客户机找谁
Server:服务器通过这个头,告诉浏览服务器的类型
Content-Encoding:服务器通过这个头,数据的压缩格式
Content-Length:服务器通过这个头,告诉浏览器回送数据的长度
Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
Last-Modified:服务器通过这个头,告诉浏览器当前资源缓存时间
Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次
Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打开数据
Transfer-Enconding:服务器通过这个头,告诉浏览器数据的传送格式
ETag:缓存相关的头
Expires:服务器通过这个头,告诉浏览器回送的资源缓存多长时间,-1或0,则是不缓存
Cache-Control:no-cache、 Pragma:no-cache :服务器通过这两个响应头,也是控制浏览器不要缓存数据
完整的http请求处理过程
(1) 建立或处理连接:接收请求或拒绝请求(三次握手的过程)
(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
(4) 访问资源:获取请求报文中请求的资源;
(5) 构建响应报文:响应客户端请求;
(6) 发送响应报文
(7) 记录日志
请求方法
1) GET
传递参数长度受限制,因为传递的参数是直接表示在地址栏中,而特定浏览器和服务器对url的长度是有限制的。
因此,GET不适合用来传递私密数据,也不适合拿来传递大量数据。
一般的HTTP请求大多都是GET。
2)POST
POST把传递的数据封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,对数据量没有限制,也不会显示在URL中。
表单的提交用的是POST。
3)HEAD
HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
4)DELETE
删除某一个资源。
5)OPTIONS
用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
6)PUT
把一个资源存放在指定的位置上。
本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
7)TRACE
回显服务器收到的请求,主要用于测试或诊断。
8)CONNECT
CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
状态码
- 状态码:由3位数字组成,第一个数字定义了响应的类别
1xx:指示信息,表示请求已接收,继续处理
2xx:成功,表示请求已被成功接受,处理。
- 200 OK:客户端请求成功
- 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
- 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
3xx:重定向 - 要完成请求必须进行更进一步的操作
- 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
- 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
- 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
- 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
- 304 Not Modified:304告诉缓存器资源没有被修改,并且响应体是空的,不会浪费带宽。
4xx:客户端错误 -请求有语法错误或请求无法实现
- 400 Bad Request:客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在。比如,输入了错误的url
- 415 Unsupported media type:不支持的媒体类型
5xx:服务器端错误,服务器未能实现合法的请求。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,
Fiddler简介
-
Fillder是位于客户端和服务器端的HTTP代理
-
目前最常用的HTTP抓包工具之一
-
功能非常强大,是Web调试的利器
-
修改请求的数据,甚至可以修改服务器返回的数据
-
监控浏览器所有的HTTP/HTTPS流量
-
查看、分析请求内容细节
-
伪造客户端请求和服务器响应
-
测试网站的性能
-
解密HTTPS的web会话
-
全局、局部断点功能
-
第三方插件
-
-
是windows下首选的抓包工具
-
使用场景
- 接口调试、接口测试、线上环境调试、web性能分析
- 判断前后端bug、开发环境hosts配置、mock、弱网断电测试
Fiddler工作原理
在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应。
Fiddler 是以代理web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
- Fildder充当的是中间代理服务器
- 可以监控客户端和服务器之间通信的全过程
- 它能够记录客户端和服务器之间的所有 HTTP请求
- Fildder一打开,就会修改系统代理,也就是使用代理服务器
Fiddler增加IP列
1、 运行fiddler,菜单,Rules->Customize Rules…或者点击右侧tab “FiddlerScript”
2、Ctrl+F查找“static function Main()”字符串,然后添加下面这行代码:
3、FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");
4.保存CustomRules.js或者点击“Save Script”按钮
SwitchyOmega插件
-
当Fiddler 的设置完了,这时候还需要在你的浏览器上设置代理服务器才能进行抓取。
-
使用 Chrome 浏览器的可以直接使用 SwitchyOmega 插件进行修改即可,操作简单
-
<github.com/FelisCatus/… github下载
-
SwitchyOmega是一款在Google Chrome 浏览器上的一个代理扩展程序,可以轻松快捷地管理和切换多个代理设置。
抓取HTTPS包
Fiddler设置
1、打开Fiddler,通过Tools->Fiddler Options进入设置界面:
2、选择HTTPS,勾选Decrypt HTTPS traffic 解密HTTPS流量
-
from all processes:抓取所有进程的流量
-
from browsers only:只抓取浏览器的流量
-
from non-browsers only:不抓取浏览器的流量
-
from remote clients only:抓取远程的客户端,当需要抓取的是手机端的流量,就需要用到这个

3、安装证书
-
当我们不知道有没有安装证书的话,我们可以选择Reset All Certificates (重置所有证书),然后一直选yes
-
之后就会提示安装一个证书,这个证书就是用来做中间人进行抓包的, Fiddler使用此证书来解密所捕捉到的包,再加密转发到相对应的服务器端或者客户端
