https://i-blog.csdnimg.cn/direct/895fd92f9b9f457caa1c2b3a6d61ba18.jpeg" />
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
HTTP
http%E5%8D%8F%E8%AE%AE%E6%8A%93%E5%8C%85-toc" style="margin-left:40px;">http协议抓包
抓包工具
fiddler的配置
fidder的用法
HTTP请求 基本格式
首行
请求头(header)
空行
正文(body)
HTTP响应 基本格式
首行
响应头
空行
正文
压缩
URL 唯一资源定位符
url encode 转义字符
URI 唯一资源标识符
当我们在浏览器中输⼊⼀个搜狗搜索的"⽹址"(URL)时,浏览器就给搜狗的服务器发送了⼀个HTTP请求,搜狗的服务器返回了⼀个HTTP响应. 这个响应结果被浏览器解析之后,就展⽰成我们看到的⻚⾯内容.(这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应,这些响应⾥就包含了⻚⾯HTML,CSS,JavaScript,图 ⽚,字体等信息).
https://i-blog.csdnimg.cn/direct/5024441e2da749c78bd34c6162c1c1e4.png" width="1200" />
HTTP
http全称为"超文本传输协议",HTTP不仅仅能传输文本,还能传输图片, 音频文件,视频,其他各种数据...广泛应用在日常开发的各个场景中(HTTP是最广泛使用的应用层协议,没有之一)
https://i-blog.csdnimg.cn/direct/eb2e42ffaef64b8ea2f601805eb1d955.png" width="1168" />
目前互联网上见到的HTTP协议,绝大部分都是HTTP/1.1版本(1.1版本已经足够好用了,升级到2.0成本比较高(浏览器/服务器的兼容性),带来的收益有限)
https可以认为是http的升级版,在http之上引入了一个"加密层"(https的安全性更高一些),除了安全性外,https和http完全一样
http协议是一种典型的"一问一答模型"的协议(客户端发一个请求,服务器就返回一个响应,一一对应)
http%E5%8D%8F%E8%AE%AE%E6%8A%93%E5%8C%85" style="background-color:transparent;">http协议抓包
借助抓包工具,观察HTTP请求/响应的详细情况,TCP/UDP也是可以抓包的,日常开发中,很少会抓TCP层次的包,但是抓HTTP的包是比较常见的
抓包:用一个程序,把自己网卡上的数据包获取到,并且解析显示出来
https://i-blog.csdnimg.cn/direct/5335a950dcbe48588de0d6f5425521b6.png" width="1200" />
因此抓包工具对于浏览器和服务器之间交互的数据细节,都是⾮常清楚的.
抓包工具
- wireshare:功能非常强,可以抓TCP,UDP,IP....当然也能抓HTTP,但是"太重了"
- chrome/edge开发者工具:自动抓包,但是没法看到HTTP原始报文数据,不适合初学者
- fiddler:推荐使用,经典的,功能强大的抓包工具
https://i-blog.csdnimg.cn/direct/5dcee0d76f954646b4a7f47869a472ae.png" width="600" />
fiddler的配置
- 确保电脑上退出了其他的代理类软件(如vpn/浏览器插件...),fiddler也是代理,可能会和其他代理冲突,导致不能正常抓包
- 开启fiddler的HTTPS功能(一次性操作),因为当前网络上大部分网站都是HTTPS
https://i-blog.csdnimg.cn/direct/1f9e3b79ee314b4bb3db5bda2a27fd0e.png" width="1200" />
fidder的用法
启动fidder后,抓包工作就自动开始了
虽然不进行任何操作,fidder也能抓到很多包(正常情况下,你的电脑上有些软件,可能就在不停的在后台与服务器进行交互)
https://i-blog.csdnimg.cn/direct/c11cf7bcaaf64845a6264e7cd43484b7.png" width="1200" />
可以使⽤ctrl+a全选左侧的抓包结果,delete键清除所有被选中的结果.
HTTP请求 基本格式
HTTP是 行文本格式的协议
请求格式包括 首行,请求头,空行,正文 四部分
首行
首行三个部分使用空格分割(响应也是如此)
https://i-blog.csdnimg.cn/direct/2f7a63b6c302492e87a6625457570ae2.png" width="936" />
请求头(header)
从第二行开始的若干行,一直到空行结束. 每一行都是一个键值对,键和值之间使用 ":空格" 分隔
HTTP中,请求头里的键值对都是HTTP标准规定的,不同的请求头,都有特殊含义 ,但是标准也允许用户自定义一些请求头
空行
请求头的结束标记
空行的作用
- HTTP协议并没有规定报头部分的键值对有多少个.空⾏就相当于是"报头的结束标记",或者是 "报头和正⽂之间的分隔符"
- HTTP在传输层依赖TCP协议,TCP是⾯向字节流的.如果没有这个空⾏,就会出现"粘包问题".
正文(body)
有的请求头中有body,有的没有. 一般来说,HTTP中,GET往往是不带body,POST 往往是带body
https://i-blog.csdnimg.cn/direct/76600e66470247c7b7b66c1ba8c1056b.png" width="1200" />
HTTP响应 基本格式
响应格式包括 首行,响应头,空行,正文 四部分
与请求头非常类似
首行
https://i-blog.csdnimg.cn/direct/1b739facb1b343b1915ff158a258b169.png" width="637" />
200是一个常见的状态码,表示"成功"
响应头
响应头也是键值对构成,只是有的键值对只出现在请求中,有的出现在响应中,有的两处都出现.
空行
响应头结束标记
正文
正文体现了 服务器给浏览器返回的数据
对于响应来说,正文通常是HTML/CSS/JS/JSON/图片/音频/字体....
响应打开后,看到的是二进制(压缩后的)
https://i-blog.csdnimg.cn/direct/5ee850ae43204a59840201ca4167b14b.png" width="1200" />
压缩
压缩是在二进制的角度上对数据进行重新编码, 在保证信息量的不变下,体积缩小了(体积小了,传输时消耗的带宽就低了)
压缩算法有很多种,设计都比较巧妙.
根据数据特点进行压缩,举个简单例子: aaabbbbbcc=>3a5b2c
URL 唯一资源定位符
URL(Uniform Resource Locator 统⼀资源定位符),俗称"网址"
互联⽹上的每个⽂件都有⼀个唯⼀的URL(用于定位网络上的"资源"(网页,文件,图片....))它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.
URL不是HTTP专属的,很多协议都会用到
https://i-blog.csdnimg.cn/direct/794ec01fac8d405bb0026144e634da83.png" width="1200" />
对于一个URL来说,主要关心其中的四个部分:IP地址(域名),端口号,层次的路径,查询的字符串
url encode 转义字符
url中的有些符号有特定含义,像/?@&:...等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.
万一你的query string键值对结构中的值里面包含了一些特殊符号,可能会是url的解析出现问题
转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式
https://i-blog.csdnimg.cn/direct/7204479d942a4e838f97d3b421a1456f.png" width="1200" />
URI 唯一资源标识符
可以简单理解成 URL是URI的一种实现,
实际日常开发中,一般不会刻意区分URL和URI这两个概念