1. HTTP概念
HTTP 往往是基于传输层的 TCP 协议实现的 . (HTTP1.0, HTTP1.1, HTTP2.0 均为 TCP, HTTP3 基于 UDP 实现 )目前我们主要使用的还是 HTTP1.1 和 HTTP2.0
Fiddler安装
Fiddler官方网址:Web Debugging Proxy and Troubleshooting Tools | Fiddler
选择 Fiddler Classic,点击安装选择 Try For Free*
填写邮箱进行注册
注册完成后,会自动触发下载
安装包加载好后,按照提示即可安装
页面如图
Fiddler抓包原理
Fiddler内容介绍
Fiddler打开后是一个左右结构的程序,左边的列表是抓到的包,右边的列表是包的详情
Fiddler是服务器的代理,是“正向代理”,给服务器代理是“反向代理”
1)在左边的表中,蓝色的代表 html(网页)
2)此处点击 Raw 可以查看请求/响应的最原始的数据格式
HTTP协议是文本格式的协议(内容都是字符串)
TCP,UDP,IP...都是二进制格式的协议
3)HTTP响应也是文本的,直接查看往往是二进制的数据(压缩后)
解压后,可以看到相应的数据是 html
往往是浏览器先请求对应的服务器,从服务器这边拿到页面数据(html)
HTTP协议报文格式
HTTP协议中的 “空行”——>
因为 HTTP 协议并没有规定报头部分的键值对有多少个 . 空行就相当于是 " 报头的结束标记 ", 或者是 " 报头和正文之间的分隔符 "HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题"
2. 请求和响应
请求:
1)首行
HTTP请求的第一行,有三个部分信息,使用 空格 分隔
1. GET:HTTP请求的“方法”(method)
2. URL:唯一资源定位符,描述了一个资源在网络上的位置
3. 版本号:HTTP/1.1
2)请求头(Header)
是一个键值对结构(有很多对键值对)
每个键值对之间,都是独占一行
键和值之间,使用 空格 来区分(此处的键值对都是“标准规定”的)
3)空行
请求头的结束标记
4)正文(body)
有的HTTP请求有,有的没有
响应:
1)首行
1. 版本号:HTTP/1.1
2. 状态码:描述了请求的结果
3. 状态描述:一串数字
2.)响应头(header)
键值对结构(有多个键值对)
每个键值对独占一行
键和值之间,使用 空格 来区分(此处的键值对是“标准规定”的)
3)空行
响应头的结束标记
4)正文(body)
正文的内容可能比较长,可能是多种格式
HTML,CSS,JS,XML,图片,视频,音频...
3. URL
——>描述某个资源在网络上的所在位置
URL基本格式:
http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1
1)http 协议方案名
常见的有 http 和 https, 也有其他的类型2)user:pass 登录信息(认证)
现在的网站进行身份认证一般不再通过 URL 进行了 . 一般都会省略3)@www.example.jp 服务器地址
可以是IP地址,也可以是域名(域名会通过 DNS 系统解析成一个具体的 IP 地址)
4)80 服务器端口号
通过IP地址,只是确定了网络资源所在主机的位置,使用端口号来区分是哪个程序
URL中的端口有时可以省略(浏览器给一个默认的值)——>
对于HTTP请求,端口号省略时默认是 80端口
对于HTTPS请求,端口号省略时默认是 44端口
5)/dir/index.htm 带层次的文件路径
描述了要访问的服务器的那个资源(写法像目录,但浏览器不一定按照目录形式存储资源)
此处的目录结构,与后续服务器代码的编写形式有关
6)?uid=1 查询字符串(query String)
键值对结构的数据,以 ? 开头
键值对之间,使用 & 分割
键和值之间,使用 = 分割
(此处出的键值对都是自定义的)
7)#ch1 片段标识符
有的网页内容比较长,就可以分成多个“片段”,通过片段标识符,可以完成页面内部的跳转
ping命令
encode
一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成 , 虽然在 URL 中没有特殊含义, 但是仍然需要进行转义. 否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号