01. Fiddler原理与HTTP请求构成
01. Fiddler原理与HTTP请求构成
1. Fiddler简介
Fiddler是位于客户端和服务端的HTTP代理
目前最常用的http抓包工具之一
功能非常强大,是WEB调试的利器
监控浏览器所有的HTTP/HTTPS流量
查看、分析请求内容细节
伪造客户端请求和服务器响应
解密HTTPS的WEB会话
全局、局部断点功能
第三方插件
使用场景
接口测试、线上环境调试、web性能分析
判断前后端bug、开发环境hosts配置、mock数据、弱网、断网测试
2. 原理
Fiddler是位于客户端和服务器端的HTTP代理
1. B/S架构
- 编写程序部署到web服务器
- WEB服务器运行在服务器上,绑定IP地址并监听某端口,接收和处理HTTP请求
- 客户端通过HTTP协议获取服务器上的网页、文档等资源
2.工作原理
作为系统代理,发送请求或接受响应
3. Fiddler下载安装
- 下载地址:https://www.telerik.com/fiddler/fiddler-classic
- 安装:常规安装
4. HTTP协议
Hyper Text Transfer Protocol (超文本传输协议)
用于从万维网服务器传输超文本到本地浏览器的传送协议
HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80
HTTP是基于请求与响应模式的、无状态的、应用层的协议
HTTP请求构成的两部分:
- 请求报文
- 响应报文
image-20221020193446827
查看请求过程
方式一:保存请求
image-20221020194151132 方式二:双击请求进行查看
image-20221020194226319
1. 请求报文
客户端发给服务器,HTTP请求报文主要由请求行,请求头部、空一行、请求正文4部分组成(请求体可以为空,例如get请求)
1.请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。
1. 请求方法字段
请求方法 | 备注 |
---|---|
GET | 请求资源 |
POST | 提交资源 |
HEAD | 获取响应头 |
PUT | 替换资源 |
DELETE | 删除资源 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
2. 统一资源定位符(URL)
Uniform Resource Locator:统一资源定位符
- 用于描述网上的资源;格式: schema://host[:port]/path/ …/ [?query-string ]
- scheme:协议,如http, https, ftp等
- host:域名或者IP地址
- port: 端口
- path:资源路径
- query-string:发送的参数
- 用于描述网上的资源;格式: schema://host[:port]/path/ …/ [?query-string ]
资源定位符 https://www.baidu.com/img/pc_675fe66eab33abff35a2669768c43d95.png
- 协议: https://
- 域名: baidu.com 对应主机IP,为了查找主机 cmd命令行可以用ping域名的方式命令查找IP
- 文件的路径和文件名称: /img/pc_675fe66eab33abff35a2669768c43d95.png
3. HTTP版本
目前普遍使用的为1.1版本, 即HTTP/1.1
2.请求头部
- 请求头可以是任意信息,根据服务器需要进行组合
请求头 | 描述 |
---|---|
Host | 主机ip地址或域名 |
User-Agent | 客户端相关信息,如操作系统、刘览器等信息 |
Accept | 指定客户端接收信息类型,如: image/jpg, text/html, application/json |
Accept-Charset | 客户端接受的字符集,如gb2312,iso-8859-1 |
Accept-Encoding | 可接受的内容编码,gzip |
Accept-Language | 接受的培言,如Accept-Langunge:zh-cn |
Authorization | 客户瑞提供给服务端,进行权限认证的信息 |
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添加公共自定义请求头(所有请求都会加上请求头a:b)
![image-20221020195739733](/assets/image-20221020195739733-i6FQL2Mt.png)
3.请求体
- 真正发送给服务器的一串文本
2.响应报文
服务器返回给客户端,HTTP响应报文主要由状态行,消息头部、空一行、响应体4部分组成。
1.状态行
请求行由HTTP协议版本字段、状态码字段及其描述3个字段组成,它们用空格分隔。 状态码:用以表示网页服务器HTTP响应状态的3位数字代码
状态码 | 描述 |
---|---|
1XX | 提示信息,请求被成功接收 |
2XX | 成功,请求被成功处理 |
3XX | 重定向相关 |
4XX | 客户端错误 |
5XX | 服务器端错误 |
# 2XX —— 表明请求被正常处理了
200 OK:请求已正常处理。
204 No Content:请求处理成功,但没有任何资源可以返回给客户端,一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
206 Partial Content:是对资源某一部分的请求,该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
# 3XX —— 表明浏览器需要执行某些特殊的处理以正确处理请求
301 Moved Permanently:资源的uri已更新,你也更新下你的书签引用吧。永久性重定向,请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。
302 Found:资源的URI已临时定位到其他位置了,姑且算你已经知道了这个情况了。临时性重定向。和301相似,但302代表的资源不是永久性移动,只是临时性性质的。换句话说,已移动的资源对应的URI将来还有可能发生改变。
303 See Other:资源的URI已更新,你是否能临时按新的URI访问。该状态码表示由于请求对应的资源存在着另一个URL,应使用GET方法定向获取请求的资源。303状态码和302状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。
当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
304 Not Modified:资源已找到,但未符合条件请求。该状态码表示客户端发送附带条件的请求时(采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部)服务端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304.。
307 Temporary Redirect:临时重定向。与302有相同的含义。
# 4XX —— 表明客户端是发生错误的原因所在。
400 Bad Request:服务器端无法理解客户端发送的请求,请求报文中可能存在语法错误。
401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。
403 Forbidden:不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)
404 Not Found:服务器上没有请求的资源。路径错误等。
# 5XX —— 服务器本身发生错误
500 Internal Server Error:貌似内部资源出故障了。该状态码表明服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障。
503 Service Unavailable:抱歉,我现在正在忙着。该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求。
2.响应头
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 设置Cookie |
Last-Modified | 资源最后修改时间 |
Content-Length | 响应内容长度 |
Content-Type | 响应的类型和字符集,如:Content-Type:text/html;charset=utf-8 |
Connection | 如keep-Alive,表示保持tcp链接不关闭,不回永久保持链接,服务器可设置 |
Location | 指明重定向的位置,新的URL地址,如304的情况 |