HTTP 协议的基本格式和 fiddler 的用法

一、HTTP是什么?

HTTP (全称为 "超⽂本传输协议") 是⼀种应用非常广泛的应用层协议

所谓 " 超文本 " 的含义 , 就是传输的内容不仅仅是文本 ( 比如 html, css 这个就是文本 ), 还可以是一些其他的资源, 比如图片 , 视频 , 音频等二进制的数据。

  1. 是一个简单的请求响应,运行在 TCP 之上。规定客户端发送什么样的请求以及得到什么样的响应。
  2. 请求和相应消息的头是以 ASCII 形式给出;而消息类容则已 MIME 格式

当我们在浏览器中输⼊⼀个 搜狗搜索的 "网址" (URL) 时, 浏览器就给搜狗的服务器发送了⼀个 HTTP 请求, 搜狗的服务器返回了⼀个 HTTP 响应。
       这个响应结果被浏览器解析之后, 就展示成我们看到的⻚⾯内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应⾥就包含了⻚⾯ HTML, CSS, JavaScript, 图片, 字体等信息)。

 

二、HTTP 协议的工作过程 

当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.事实上 , 当我们访问一个网站的时候 , 可能涉及不止一次的 HTTP 请求 / 响应 的交互过程 .
可以通过 chrome 的开发者工具观察到这个详细的过程 .
 

通过 F12 打开 chrome 的开发者工具 , 切换到 Network 标签页 . 然后刷新页面即可看到如下图效果. 每一条记录都是一次 HTTP 请求 / 响应 

 

 

 三、HTTP 协议格式

 

 

请求和响应的格式第一行不一样,后边的都一样。都分四个部分:

  1. 行信息(请求=>请求行,响应=>响应行/状态行)
  2. 头信息(请求=>请求头,响应=>相应头)
  3. 空行
  4. body(正文)(请求=>请求正文,响应=>响应正文)

1、常用的抓包工具

这里列举了常用的抓包工具
比如常用的抓包工具,charlesfiddler

以 Fiddler 为例. (下载地址: https://www.telerik.com/fiddler/ )

 左侧窗⼝显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
右侧上⽅显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
右侧下⽅显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
请求和响应的详细数据, 可以通过右下角的
View in Notepad 通过记事本打开.

 

2、抓包工具原理


Fiddler 相当于⼀个 "代理".
       浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器.
       当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器,因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的。

因为 HTTP 协议并没有规定报头部分的键值对有多少个 . 空行就相当于是 " 报头的结束标记 ", 或者是 " 报头和正文之间的分隔符 ".
HTTP 在传输层依赖 TCP 协议 , TCP 是面向字节流的 . 如果没有这个空行 , 就会出现 " 粘包问题 ".

3.Fiddler的原理


Fiddler 相当于一个 " 代理 ".
浏览器访问 sogou.com 时 , 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器 .
当 sogou 服务器返回数据时 , Fiddler 拿到返回数据 , 再把数据交给浏览器 .
因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节 , 都是非常清楚的 .

3.抓包结果


以下是一个 HTTP 请求 / 响应 的抓包结果 .
HTTP请求
POST http://wup.imtt.qq.com:8080/?encrypt=17&tk=903001ea781d0525bf86d9561ed04ccb50fbb265bbb3304ad8a3d31d7ab428d5323f6e7f03b881db21133b1bf2ae5bc5&iv=80AD8969948C4f0c HTTP/1.1
Q-UA2: PR=PC&CO=WBK&QV=3&PL=WIN&PB=GE&PPVN=10.9.0.4626&COVC=047700&CHID=43665&RL=1920*1080&MO=QB&VE=GA&BIT=64&OS=10.0.19044
Q-GUID: 1216EFF507D5E2D9B21BAE1180D82E2C8B1BFFFD6C7CB6105EC913AF1C157CB3
QQ-S-ZIP: gzip
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 QQBrowser/9.3
Host: wup.imtt.qq.com:8080
Content-Length: 288
Pragma: no-cache
首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个学编程的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值