作者:极客小俊微信官方账号:同名

前言
有人做了五年的开发,抓不到包!
但不要害怕,不要哭,跟着我学会一定有收获! 兴趣是你最好的老师。如果你感兴趣,你必须学习 ,把他们卷死!??????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
温馨提示:全程干货,内容较多,建议新手朋友可以先表扬 慢慢看收藏! ??
Fiddler是什么?
在正式学习Fiddler之前, 我们还是要对的Fiddler初步了解!
Fiddler是以web proxy以代理服务器的形式工作 , 它也是一个http协议数据抓包和调试代理工具记录和检查目前,你的计算机和互联网之间http消息, 也就是说,可以传输网络发送与接受的数据包进行截获、重发、编辑、转存等操作 也可用于检测网络安全。 是不是感觉很强大?????感觉很强大!??!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Fiddler主要能做什么?
Fiddler是一个客户端和服务端的一个http代理工具 , 客户端和服务端彼此之间的交流是可以的Fiddler所监听到!
Fiddler不仅是一个非常强大的抓包工具,也是一个web调试的利器
可实现以下功能:
- 监控我们
浏览器所有的http/https所有的信息和流量,即所有的可以监控 - 监听截取
http请求后,你可以做一些事情查看 分析浏览器请求的内容细节可以伪造一些请求 可以伪造服务器响应! - 还可以测试网站的性能
- 解密
https的web会话 - 全局、局部断点功能!
Fiddler也有广泛的应用场景
- 接口测试
- 接口调试
- 在线环境调试
- web项目性能分析
- 前后端bug监测
- 弱网断网监测
- hosts配置监测
- mock模拟测试
要知道Fiddler作为一个系统代理,所有来自微软互联网服务的人http请求在到达目标Web服务器以前都会经过Fiddler,同样,一切Http在返回客户端之前,响应也通过Fiddler。
为什么要学习?Fiddler?
因为我们必须和解开发http对吧? 还有一些新手朋友要学习http但是http如果你没有一个知识点,知识点更多,更混乱看见摸着的数据参照,很难控制http信息, 那么要理解http我个人可以从协议开始抓包工具从浅到深的形式慢慢理解http以及Fiddler使用这种抓包工具
所以不管你是分析http还是刚学习http的朋友 ,可以先学习Fiddler抓包工具!
并且在windows只要系统下提到抓包首选肯定是Fiddler
总之学习了Fiddler之后,会让你对的http理解更上一层楼!
下载Fiddler
官方下载地址
https://www.telerik.com/download/fiddler
填写好电子邮箱和国家地区 点击Download for windows可以下载
如图
注意 这个Fiddler工具是基于.NET Framework的 ,因为Fiddler是c#开发的
假如比较老windows系统确保运行环境!
Fiddler安装方法也很简单 获得安装包后,直接选择安装路径 或 下一步没脑子就可以了!????????????????????????????????!??????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
如下界面将显示安装成功!
软件体系结构—B/S 与 C/S架构
B/S架构
在了解Fiddler在原理之前,让我们先了解一下web最基本的架构是什么?B/S架构, 它也是目前最常用的软件架构之一
B就是浏览器(Browsers) 也就是客户端 这边
S就是服务器端(Server)也就是web服务器这边
我们平常的web服务、web项目、web应用都是运行在服务端的, 那么通过绑定ip地址 端口监听接收和处理一些前端,即客户端发起的http请求, 从而客户端通过http协议在指定的服务器上获得请求和请求页面 文件 资源、等等…
如图
举个例子
当你在浏览器输入地址栏百度地址结束后,服务器终端将返回百度html页面资源
总结
B/S架构就是浏览器/服务器的一种交互模式,是Browser/Server的简称。
此外,该架构软件不需要在用户的安装任何东西客户端程序只需要安装在用户的电脑上浏览器即可。
用户只使用浏览器通过web服务器与数据库交互,交互的结果将是html网页形式显示在浏览器上。
C/S架构 [了解]
出了我们的B/S架构,其实还有一种C/S架构是客户端/服务端互动模式,是的Client/Server简称。它是早期常用的一种软件架构,该架构软件需要安装在用户的电脑上客户端程序, 感兴趣的朋友可以自己理解,这里就不赘述了!
在软件开发中,我们通常根据需要选择两个基本架构!
HTTP 基础知识
学习Fiddler的时候,HTTP知识点也是必不可少的, 所以这里一定要给大家简单介绍一下HTTP相关知识!
http中文意思为超文本传输协议 英文全称为Hyper Text Transfer Protocol
它是用于万维网服务器传输超文本一种本地浏览器传输协议
目的是保证客户端与服务端间的通信
什么是http请求和响应?
http的工作方式为一个简单的客户端请求 与 服务端响应的应答过程
它指定了客户端发送给服务器什么样的消息形式以及得到什么样的消息响应
所有的www文件都必须遵循这个标准协议, 目的是提供一种发布和接收html页面的方法
举个例子
比如说 客户端(浏览器)向服务器提交一个http请求, 那么服务器又会向客户端这边返回响应信息。而这些响应信息包含关于客户端请求的状态信息以及客户端所需要的内容信息。
如图
http协议和web之间的本质
其实就是浏览器和服务器打交道的
客户端向服务器端发送Http请求,然后服务器端向客户端返回http响应!
http协议就是浏览器和服务器之间进行沟通的一种规范, 也就是以这个规范来向服务器发起请求, 服务器才会给客户端进行正确的响应, 所以http有的时候也可以理解为是一种 规范、规则、标准
http协议是属于应用层的协议,而且是基于TCP/IP协议的, 也就是说http通信发生在TCP/IP链接之上
通俗一点说http协议就是基于TCP的一种应用层协议 它不会关系数据传输的细节问题,也就是说你不用去关心它下层TCP的运行逻辑, 它的核心只在于用来规定客户端和服务端的数据传输格式
最早http是用来向客户端传输html文件内容,默认的端口80
扩展
有兴趣的朋友可以自行了解一下iso网络七层模型
通俗点说http,就是在请求和响应之后,服务器端立即关闭连接,并释放资源,这样既保证了资源可显示与可用性,也吸取了TCP协议的可靠性优点,但是缺点就无法跟踪用户的操作了,所以我们在后端开发的学习中才会接触一个东西叫session和cookie技术
所以你也可以理解为http是基于请求与响应的模式, 并且是无状态的应用层协议
http请求和响应的基本原理
任何一个http请求都只会分为两个部分: 一个请求报文另外一个是响应报文
请求报文是客户端按照一定的格式生成一段文本,然后发给我们的服务端, 而服务器接收到了这样一个请求报文就会解析里面的内容,然后做出回馈,也就是响应
响应报文也就是服务器端根据请求报文反馈给客户端的文本信息
http请求报文 (request)基本结构
http请求(request)也叫请求报文一个基本的http请求报文结构分为如下几点:
请求行:就是请求方式和协议,也就是说用于描述客户端的请求方式,例如post/get方式, 以及请求的资源名称和HTTP协议的版本号!若干个请求头: 这些也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境等等, 这些消息头中有很多头部字段名和对应的值它的格式为name:value空白行请求正文内容
抓包了解一下
那么我们在学习http知识的时候 就可以先直接使用Fiddler来抓取一个http请求和http响应来先看看到底是什么东西!
这样也有助于一些新手来理解http!
我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http请求结构都包含哪些信息!
例如一个GET方式的请求(Request)信息 如下:
GET https://www.baidu.com/?name=zhangsan HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
例如一个POST方式的请求(Request)信息 如下:
POST https://api.codelife.cc/stat/userHm HTTP/1.1
Host: api.codelife.cc
Connection: keep-alive
Content-Length: 48
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Content-Type: application/json
Accept: application/json, text/plain, */*
sec-ch-ua-platform: "Windows"
version: 1.2.27
Origin: chrome-extension://mhloojimgilafopcmlcikiidgbbnelip
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
{"fp":"4c49c2fd79e1658546e4b8ad","tn":6}
怎么样 是不是看这一大堆脑壳都大了呢 ? 哈哈哈不要着急,我们慢慢来学!😁😁😁
我们先来看一张请求(Request)图解
如图
然后我们来逐一拆解上图中的各个部分!
1.请求方式 (Request method)
我们常见的一些请求方式也就是POST/GET,当然还有其他的一些请求方式, 如下表:
| 请求方法 | 描述 |
|---|---|
GET |
请求资源 比如常见的就是输入一个URL去请求一个资源下来, 它也可以带上一定的参数一起请求 |
POST |
提交资源 比如说我们想把用户名和密码 提交到服务器去,这个时候用POST比较好 |
HEAD |
获取响应头 |
PUT |
替换资源 |
DELETE |
删除资源 |
OPTIONS |
允许客户端查看服务器的性能 |
TRACE |
显示服务器收到的请求 常见于测试和调试诊断! |
2.URL (Uniform Resource Locator)
URL中文名为统一资源定位符 英文全称Uniform Resource Locator ,
我们网络中的每一信息资源都有统一的且在网上唯一的地址!
URL具体由4部分组成:协议、主机、域名、端口、路径文件、[附加资源]
URL的一般语法格式为:
protocol :// hostname[:port] / path / [?query-parameters]
1.协议 (protocol)
协议有http、ftp、https、等…
2.主机名 (hostname) + 域名
主机名+域名 例如: www.xsphp.com
3.端口 (port)
端口是一个数字, 端口是可选的 省略时使用方案是服务器默认配置的端口
例如 80、8080、..
各种传输协议都有默认的端口号,如http协议的默认端口为80
如果URL地址省略端口,则使用默认端口号
注意
有时候出于安全或其他考虑,可以在服务器配置上对端口进行重新定义,也就是采用非标准端口号,那么此时,URL地址中就不能省略端口号这一项。
4.路径文件 (path)
由零或多个/符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
例如: /tpl/index.php
5.查询参数 附加资源 (query-parameters)
这一项在URL中也是可选的 用于给动态网页如 PHP/JSP/ASP/ASP.NET等后端页面 传递参数的一种方式,并且如果是GET请求方法, 那么可有多个参数, 它们彼此用&符号隔开,每个参数的名和值用=符号隔开
语法格式: ?参数=值&参数2=值 以此类推!
例如: ?id=33&age=25&name=zhangsan
举个例子
一个比较常见的url地址, 如下:
https://www.xxxx.net/xxxx/xxxx/xxxx/100?num=1001.2014.3001.5501
3.请消息求头 (Request Header)
请求消息头也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等前面已经说过了, 并且请求头是可以由开发人员根据需求去进行自定义的
这些消息头中有很多头部字段名 和 对应的值它的格式为 name:value
我们常见的一些请求头如下表:
| 请求头 | 描述 |
|---|---|
Host |
主机IP地址或域名 |
User-Agent |
提交一些客户端相关信息,例如: 操作系统、浏览器等一些版本信息给服务器, 而这些信息可能会让服务器按照一定的规则给客户端返回兼容性比较好的信息! |
Accept |
指定客户端接收的信息类型,例如:image/jpg,text/html,application/json也就是可以让客户端告诉服务器 之后客户端这一边想接收到什么样的数据格式 |
Accept-Charset |
告诉服务器等一会这边客户端需要接收的字符集编码格式, |
Accept-Encoding |
告诉服务器, 客户端这边可接受的内容压缩编码,例如gzip 可以在一定程度上节省流量! |
Accept-Language |
告诉服务器, 客户端可接受的语言,例如Accept-Language:zh-cn |
Authorization |
客户端提供给服务端进行权限认证的信息, 也就是要告诉服务器端一些认证的信息,服务器才能返回响应的数据! |
Cookie |
携带的COOKIE信息, 普通情况下,当一个用户登录成功,就会在本地保存一份cookie,下次请求就会直接带上这个cookie信息,也就是这个用户的相关信息 |
Referer |
当前文档的URL 也就是纪录下从哪个链接地址提交到服务器的 |
Content-Type |
向服务器提交内容的格式例如:Content-Type:application/x-www-form-urlencoded总而言之,就是告诉服务器,客户端传递的内容属于什么格式 或 其他编码格式! |
Content-Length |
数据长度, 也就是客户端向服务器端提交内容的数据长度有多少字节! |
Cache-Control |
缓存机制,例如:Cache-Control:no-cache |
pragma |
防止页面被缓存,与Cache-Control:no-cache作用一样 |
| … |
我们可以用Fiddler截取一个请求头看看
如图
4.空行
空白行 也就是在消息头结束的下方,会存在一个空白行, 这是必须存在的, 是由HTTP标准规定的!
5.请求体
请求体它的出现是要根据请求的方式不同而不同, 也就是如果是POST那么就会以键与值的形式进行发送, 如果是GET请求那么这里就不会包含请求正文内容
http响应报文 (Response)基本结构
http响应(response)也叫响应报文
其实响应报文比请求报文更加简单, 你只要能够搞懂请求报文 那么响应报文就很容易搞懂!
http响应(response)的一个基本结构分为如下几点:
响应行响应头空白行响应体
我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http响应结构都包含哪些信息!
举个例子
如果你还看不明白 那么我们先来看一张http响应(response)图解 你就会明白了!
然后我们来逐一拆解上图中的各个部分!
1.响应行
响应行也叫状态行, 上图中响应行内部其实包含了3个重要的信息部分:
HTTP协议的版本、HTTP状态码、HTTP的状态描述
1.HTTP协议的版本现目前都是HTTP/1.1 版本 这个没什么好说的!
2.HTTP状态码 可以用来表示网页服务器端给客户端返回的HTTP响应状态, 通常都是3位数字的代码, 而这些常见的状态码又可以分为几种提示类型: 🙂 如下表
| 类别状态码 | 描述 |
|---|---|
1xx |
这种类别的状态码 为提示消息类型 通常表示请求被服务器端成功接收 |
2xx |
这种类别的状态码 为成功消息类型通常表示请求被服务器端成功处理 |
3xx |
这种类别的状态码 为重定向类型通常表示被服务器端重新定义了请求方向,需要进一步的操作以完成请求 |
4xx |
这种类别的状态码 为客户端错误信息通常表示服务器告诉客户端的一些错误消息 |
5xx |
这种类别的状态码 为服务端错误信息通常表示告诉客户端 服务器这边出现的一些错误信息 |
3.HTTP的状态描述是紧跟在状态码后面的英文单词
每一种具体类别状态码+状态描述可以参考下表:
1xx: 提示消息类型
| 消息: | 状态描述 | 含义 |
|---|---|---|
| 100 | Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 |
| 101 | Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
2xx: 成功消息类型
| 消息: | 状态描述 | 含义 |
|---|---|---|
| 200 | OK | 请求成功(其后是对GET和POST请求的应答文档。) |
| 201 | Created | 请求被创建完成,同时新的资源被创建。 |
| 202 | Accepted | 供处理的请求已被接受,但是处理未完成。 |
| 203 | Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。 |
| 204 | No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 |
| 205 | Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 |
| 206 | Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。 |
3xx: 重定向类型
| 消息: | 状态描述 | 含义 |
|---|---|---|
| 300 | Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 |
| 301 | Moved Permanently | 所请求的页面已经转移至新的url, 说通俗一点表示请求的资源分配了url,以后就应该使用这个url |
| 302 | Found | 所请求的页面已经临时转移至新的url, 也就是说请求的资源临时分配了url,本次请求暂且使用这个url, 这里302与301的区别是,302表示临时性重定向,重定向的url还有可能还会改变。 |
| 303 | See Other | 表示请求的资源路径发生改变,请使用GET方法请求url。其实与302一样,但是明确指出让我们使用GET方法请求url |
| 304 | Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 |
| 305 | Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取。 |
| 306 | Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。 |
| 307 | Temporary Redirect | 被请求的页面已经临时移至新的url。 |
4xx: 客户端错误信息
| 消息: | 状态描述 | 含义 |
|---|---|---|
| 400 | Bad Request | 服务器未能理解请求,通常为表示请求的报文中存在语法错误 ,比如: 提交json数据的时候,如果json格式有问题,接收端接收json,也会出现400 bad request |
| 401 | Unauthorized | 被请求的页面需要用户名和密码。 |
| 402 | Payment Required | 此代码尚无法使用。 |
| 403 | Forbidden | 对被请求页面的访问被禁止。 |
| 404 | Not Found | 服务器无法找到被请求的页面。 |
| 405 | Method Not Allowed | 请求中指定的方法不被允许, 请求的方式get、post、delete方法与后台规定的方式不符合 例如: 比如: 后台方法规定的请求方式只接受get,如果用post请求,就会出现 405 method not allowed的提示 |
| 406 | Not Acceptable | 服务器生成的响应无法被客户端所接受。 |
| 407 | Proxy Authentication Required | 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 |
| 408 | Request Timeout | 请求超出了服务器的等待时间。 |
| 409 | Conflict | 由于冲突,请求无法被完成。 |
| 410 | Gone | 被请求的页面不可用。 |
| 411 | Length Required | “Content-Length” 未被定义。如果无此内容,服务器不会接受请求。 |
| 412 | Precondition Failed | 请求中的前提条件被服务器评估为失败。 |
| 413 | Request Entity Too Large | 由于所请求的实体的太大,服务器不会接受请求。 |
| 414 | Request-url Too Long | 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。 |
| 415 | Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求, 例如: 后台程序不支持提交的content-type类型,就会返回415 |
| 416 | 服务器不能满足客户在请求中指定的Range头。 | |
| 417 | Expectation Failed |
5xx: 服务器错误信息
| 消息: | 状态描述 | 含义 |
|---|---|---|
| 500 | Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 |
| 501 | Not Implemented | 请求未完成。服务器不支持所请求的功能。 |
| 502 | Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应。 |
| 503 | Service Unavailable | 请求未完成。服务器临时过载或当机。 |
| 504 | Gateway Timeout | 网关超时。 |
| 505 | HTTP Version Not Supported | 服务器不支持请求中指明的HTTP协议版本。 |
2.响应头 (Response Header)
响应头也叫消息报头 也就是服务器端要告诉客户端的一些附加信息, 但是也有可能这些响应头是由后端开发人员进行自定义的!
而且这里的响应头跟请消头 很类似, 格式也基本一样, 它的格式为 name:value
具体我这里也列举了一些常见的响应头 如下表:
| 响应头 | 含义 |
|---|---|
Server |
HTTP服务器的软件信息 |
Date |
响应报文的时间, 要注意返回时间的时区 |
Expiros |
服务器指定的一个缓存过期时间 |
Set-Cookie |
设置Cookie, 也就是服务器返回的一段文本给客户端,让客户端保存好,下次请求就把这个cookie文本带上! |
Last-Modified |
资源最后修改时间 ,也就是客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用, 也就是说不用在从服务器中进行返回 |
Content-Type |
服务器返回给客户端的响应类型和编码字符集例如:Content-Type:text/html;charset=utf-8 |
Content-Length |
内容长度, 也就是服务器返回给客户端返回的内容是多少字节 |
Connection |
例如Keep-Alive,表示保持tcp链接不会关闭,当然它不会永久保持链接,我们在服务器端中是可以设置的 |
Location |
指明服务器给客户端重定向的位置,也就是新的URL地址 如:304的情况 |
| … |
还有更多的响应头这里就不一一列举了!
3.空白行
空白行也就是http规范制定的必须存在的一个空行, 空行的目的就是一种格式,也就是要告诉用户接下来的内容就是正文内容了!
4.响应体
响应体也就是实际从服务器返回给客户端的正文内容,也可能是一些字符串, 也可以是任意的格式:
响应体大多数情况下都是html、json、文本、xml 这些格式!
小结
对于http相关的的知识点 就说这么多了,对于学习fiddler足够了
接下来你就可以愉快的学习Fiddler了🤗
Fiddler运行原理
Fiddler的原理简单点说就是通过改写HTTP代理然后让网络数据从Fiddler这边通过 这样子来监控并且截取到网络信息数据。当你打开Fiddler的时候, 就已经设置好了浏览器的代理了。当你关闭的时候,它会自动的帮你把代理还原
之前也说过了 B/S架构就是客户端和服务器之间的 请求和响应, 刚刚我们也知道了Fiddler通过代理的形式来进行监听,它在请求和响应中起到一个什么样的角色呢?
这里还要清楚一点的就是 浏览器默认走的是我们的系统代理
其实这里的代理监听 就是在 请求和响应之间插了一脚, 让fiddler成为系统代理
在你安装好Fiddler之后启动,并可以打开菜单栏中的Tools--->options--->Connections
如下图
看到了吧,这里有一句Act as system proxy on startup意思就是(在启动时充当系统代理),并且默认监听端口设置为了8888
如图
这里以chrome浏览器为例:
只要fiddler一旦启动并开始监听的时候,就会默认成为系统代理, 所以你的网络请求 也就会被fiddler所抓取到!
如图
或者如下图一样Fiddler就是一个中间的proxy(代理服务器)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItS8dJ6N-1651910920350)(img/fiddler_3-3.png)]
当关闭fiddler的时候,手动设置代理选项就会被清空
所以我们才会说Fiddler是介于客户端和服务器中间的一个角色, 监控客户端和服务器所有通信的过程!
小结
Fiddler是以代理WEB服务器的形式工作的,浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,
浏览器默认通过自己发送HTTP请求到服务器,本地使用代理地址:127.0.0.1, 端口:8888.
而当Fiddler开启会自动设置系统代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。
但是如果Fiddler非正常退出,这时可能会因为Fiddler没有自动注销,而会造成网页无法访问。
解决的办法是重新启动下Fiddler就可以了, 这也是有很多新手安装了Fiddler之后导致一些网络无法访问的原因之一!
Fiddler使用教程详解
Fiddler的配置
安装证书
fiddler默认是只抓取http协议, 如下图
总之以后如果会话列表中的Host列中出现Tunnel to...字样都说明是证书的问题, 这种就不能抓取到我们想要的会话
那么要抓取https协议的会话需要打开配置安装证书才可以,毕竟目前很多网站都是https协议的, 所以在抓包之前,我们还要配置一下证书 否则无法抓包!
操作方法如下:
执行菜单栏中的:Tools---->Options---->HTTPS然后勾选Decrypt HTTPS traffic(解密HTTPS流量)
然后会弹出一个对话框 直接点击YES即可!
注意
你是第一次安装的Fiddler那么正常情况下会弹出证书安装的相关提示!
如果没有弹出提示,那么久勾选Actions---> Trust Root Certificate(信任根证书)
如图
接下来弹出这个对话框 全部点击是 即可
如图
然后弹出Added Fiddler's root certificate to the Machine Root list(将Fiddler的证书添加到机器根目录列表中) 点击确定
最后把下面的:
Ignore server certificate errors(unsafe)忽略服务器证书错误(不安全)
check for certificate revocation (证书撤销检查)
这两个选项也勾选上!
如图
那么现在证书也已经安装到Fiddler上了, 我们可以从Actions中选择Open Windows Certificate Manager这一个选项, 打开打开Windows证书管理器去查看
如图
打开打开Windows证书管理器 之后点击菜单栏上的 操作--->查找证书然后输入Fiddler 就会查找出证书了
如果没有说明没有安装成功!
如图
证书名为DO_NOT_TRUST_FiddlerRoot 大家可以对照着看看!
信任证书
证书安装了之后 还要设置一下信任才行!
直接选择Tools--->Options---->HTTPS---->Actions--->Trust Root Certificate
如图
在接下来弹出的对话框中直接点击确定或yes就行了!
好了现在不出意外的话就可以进行正常的抓取HTTPS包了
注意
如果还是不行,那么最好重置一下证书 在Actions中选择Reset All Certificates(重置所有证书) 然后点击确定删除Fiddler所配置的证书,最后重新执行之前的步骤就可以了!
如图
小提示
我们在Skip Decryption中输入ip地址或者域名可以用来跳过该主机或域名的https数据抓取
例如
Firefox 代理设置
如果你是Firefox 浏览器那么一定要开启系统代理或者手动设置代理 才能正常的抓包!
在Firefox中的设置下找到网络设置选择系统代理或者手动设置代理 都可以!
如图
Firefox 证书设置
有些Firefox的版本需要手动去安装一下证书,才可以正常的去抓取信息
首先我们可以从Fiddler中手动的导出证书,操作如下
菜单栏选择Tools-->Options-->HTTPS-->Actions选择Export Root Certificate to Desktop(将根证书导出到桌面)
如图
就会自动把根证书导出到电脑桌面
如图
然后把这个证书导入到FireFox浏览器中去
在FireFox中点击设置-->下面的隐藏与安全---->找到证书--->点击查看证书
如图
点击导入
选择刚刚从Fiddler导出的证书
就可以了,这是针对比较老一点的FireFox浏览器解密 HTTPS 流量的解决办法
如果已经安装了证书会提示已经存在!
Fiddler请求基本过滤
fiddler默认上抓到的是我们web端和移动端所有的请求请求,如果web端上打开了网页并且同时手机也在发送请求会话的时候, 那么这时候就需要开启过滤功能了!
我们通过Fiddler菜单栏中的Tools--->Options-->HTTPS修改..from all processes这一项
如图
选项含义如下表:
| 选择项 | 描述 |
|---|---|
from all processes |
抓所有进程所产生的请求会话 |
from browsers only |
只抓浏览器进程所产生的请求会话 |
from non-browsers only |
只抓非浏览器的请求 |
from remote clients only |
只抓远程客户端请求, 一般手机抓包会用! |
Fiddler中开启或关闭抓包功能
当你要Fiddler抓数据包的时候, 只需要确保Capture Traffic选项是开启就可以了具体操作如下:
在菜单栏选择File –> Capture Traffic就可以了, 开启后再左下角状态栏上会有Capturing的字样显示!
如图
注意:再次点击了Capturing就会关闭抓包,系统代理也会关闭
Fiddler核心功能分区
fiddler大致分为5 个区域,分别为菜单栏、工具栏、会话监控列表、辅助选项卡、状态栏
如图
菜单栏
主要的功能其实很简单主要又包含file(文件)、edit(编辑)、Rules(规则)、 Tools(工具) 、View(视图) Help(帮助)
file菜单主要包含新建视图、加载一个保存好的抓包会话文件、保存所有会话列表数据到一个.saz文件中等等.
edit菜单主要包含一些编辑的功能,例如对会话的:复制 粘贴 拷贝等操作
Rules规则菜单所谓规则 指的也就是抓包的规则, 按照设置的一系列规则来显示抓取的数据会话常见勾选设置有:
Hide CONNECTs(把建立通道连接隐藏了)的规则
Hide 304s(也就是304相关的会话也隐藏了)的规则
Hide image Request (也就是隐藏和图片相关会话)的规则
其他Rules规则菜单中的规则选项大家可以自行尝试!
Tools(工具菜单) 这个菜单多数是针对fiddler这款工具本身的一些网络设置
View(视图菜单) 这个菜单是针对fiddler显示界面与视图的一些设置,如果有些工具栏和按钮没有显示,就可以在这里来查找!
Help(帮助菜单) 一些关于fiddler和网络的帮助信息文档,有兴趣的可以去查查看!
工具栏
工具栏上的快捷按钮,也是平常我们在抓包过程当中经常会使用到的,这里我列举一些常会用到的工具按钮
add a comment(添加评论备注按钮)
使用这个工具按钮你可以给某个会话添加一些描述或者备注信息!
如图
Replay(重放请求按钮)
这个按钮的作用其实就是,重新发一次当前你所选择的会话请求, 也就是说你点击一下Replay就会通过Fiddler来帮你发一次请求到服务器去!
也可以通过选择一个会话之后点击键盘上的R键进行快速重放操作!
如图
如果你想一次性向某个会话发送n次请求, 那么可以先选择一个会话,然后按住shift+R 或者 按住shift+Replay按钮或者shift + u来输入一个请求的次数!
如图
这种操作可以对一些普通的基础服务器做一个压力测试, 也就相当于一个简单并发测试
Remove session(删除会话按钮)
删除会话按钮顾名思义就是用来删除列表中的会话, 它这个按钮内部包含了删除会话的一些过滤方法
比如:
1.Remove All(删除全部会话) 快捷键为ctrl+x
2.images (删除图片相关的请求会话)
3.connect (删除连接相关的请求会话)
4.Non-200s (删除非200状态的请求会话)
5.Non-Browser(删除非浏览器的请求会话)
等等…
当然删除会话的方法还有很多,比如你在会话列表中选择了某几个会话想保留,其他会话全部删除
这种操作可以先按住ctrl然后选择要保留的会话,然后再按下shift+delete即可!
如图
当然也可以在会话列表中选择某一个会话然后右键选择Remove命令来进行删除
selected Session (删除选择的会话)
Unselected Session (删除未选择的会话)
All Session (删除全部会话)
如图
当然也可以直接点击键盘上的delete来进行删除会话!
Decode(解码按钮)
当把这个按钮点击上了之后,会对所有返回的请求会话进行解码
要知道http有的时候返回的正文内容是被编码之后的,若要解码全部会话中的响应报文可以先把这个按钮点选上, 再抓包的时候响应报文就会自动解码其中的正文内容!
如图
当然你也可以不用点选这个按钮,要解码那个会话,再选择会话的时候点击右边响应报文中的Response body is encoded click to decode(解码响应报文) 就可以了!
如图
Keep session (保持会话按钮)
这个按钮的功能可以帮你规定会话列表中最多能够保留多少个会话, 根据需求自己选择就可以了!
如图
Any Process(瞄准目标会话)
这个功能有点意思, 可以瞄准你想要抓取的对象
比如说: 我们现在要抓取一个ie浏览器的请求数据包, 那么可以以下操作
如图
看到Process(进程)了吧, 都是瞄准的ie浏览器来进行抓取的请求!
Find(会话查找按钮)
find按钮就是用来进行搜索和查找会话的, 我们可以根据一些条件快速定位到想要的会话请求
它对应的快捷键为ctrl+f
如图
一些其他选项的含义如下表:
| 选项 | 描述 |
|---|---|
Match case |
表示区分大小写 |
Regular Expression |
正则表达式 |
Search binaries |
搜索二进制文件 |
Decode compressed content |
解码压缩内容 |
Search only selected sessions |
只搜索选择的请求 |
Result Highlight |
搜索结果的强调颜色 |
Save(会话保存按钮)
这个按钮会把当前所有的会话全部以一个.saz的一个归档文件进行保存!
这样也方便发给其他的开发和测试人员观看, 这没什么好说的!
照相机按钮
这个按钮就是单纯的截图,截图的时候会产生一个倒计时, 然后把截好的图片通过本地发送请求到localhost, 也可以拷贝出来! 用处不是很大!
如图
Browse (浏览器按钮)
这个按钮的作用就是可以快速的打开当前电脑里已安装的浏览器 没什么太大特别的!
Clear Cache(清除缓存按钮)
这个按钮的作用就是清除缓存, 注意它是清除的ie浏览器的缓存
TextWizard(按钮)
这个按钮的功能可以让文本进行编码与解码
如图
会话列表 (Session list) 详解