HTTP协议格式及 fiddler 的使用

简介: HTTP协议格式及 fiddler 的使用

简述 HTTP 协议


HTTP 协议是个使用非常广泛的应用层协议, 应用层协议通常是需要 “自定义协议” 的, 自定义协议可以基于现有协议进行定制, HTTP 之所以应用广泛就是因为其可定制性非常强.


日常生活中遇到 HTTP 的场景 :


  1. 使用浏览器打开一个网页
  2. 手机app加载数据.
  3. 微信支付宝小程序.
  4. 游戏中的界面.


HTTP 是 “一问一答” 形式的协议, 也就是客户端发送一个请求, 服务器响应一个回答.

HTTP 是一个文本格式的协议, 要想看到它的协议格式, 还得借助一些外部工具来展现出来, 我们可以通过抓包工具来获取到 HTTP 协议.


fiddler(抓包工具) 的使用


抓包工具就相当于一个代理, 每当客户端和服务器数据进行交互时, 都要先经过它, 我们就可以在抓包工具上查找到需要的数据包.

这里我们使用 fiddler 来抓包(fiddler 专注于 http, 使用简单), 原理图如下 :


de662084c2be4adba009f81b96c4f0be.png


我们下载好 fiddler 后, 首先要勾选这几个框 :


b2b9571f2c5e416999cc283f7517c2e5.png


在设置过程中, 会弹出一个对话框, 点击 “是”, 就可以进行抓包了.


fiddler 作为一个代理, 可能会与电脑上其他代理起冲突, 比如一些浏览器插件, 加速软件啥的.

进入fiddler 可以看到 :

abcbbb0d7f2541adb953484dcef449b1.png


左侧显示已经抓到的包的列表, 列表中的内容是时刻更新的, 因为电脑时不时的就在发送网络请求.


那我们如何查找要抓的包呢?

就以访问百度为例 : https://www.baidu.com/

7e250f31059f4044a03aa2d25965eabe.png


可以看到仅仅一个请求, 就出现了这么多数据包, 具体如何查找呢?


  1. 先看颜色, 黑色响应的是普通数据; 蓝色响应的是 http. 我们关注蓝色.
  2. 再看域名 : https://www.baidu.com
  3. 再看响应长度的数据长度, 一般找数据长度比较长的.


再看上图, 发现巧了第一个就是了, 双击它, 就会显示详情, 右上角是请求, 右下角是响应.

首先我们勾线 Raw, 显示出最原始的 http 请求的数据包, 看不清也可以点击右下角的按钮放大来看.

5d8de41583304a27917760b7bfa5e2f1.png


可以看到, 这就是一个完整的 http 请求, 它是文本数据,

471a9f8f90914550b3b15cc30826a6fb.png


其实所谓的 http 请求, 就是通过代码构造出一个 http 格式的字符串, 再写入 tcp 的 socket 中就行了.


协议格式


一个 HTTP 请求数据, 包含了四个部分.


1.首行 :


c4778827c8c34f568e57db48c6072423.png

2.报头(header) :


d7e0cb107eff49268e6a5c798cb03dab.png

3. 空行: 这里截图体现不出来, 可以自己观察一下.

efc7dffa83364d698ff594d8ed97d88e.png


4. 正文(body) : 空行后面的内容, 有时候可以没有.(这里没有)


来看响应 :

注意 : 响应可能是压缩过的(压缩过的显示是二进制), 压缩可以减少网络传输的数据量, 节省带宽. 把数据压缩本质上是用 cpu 资源换带宽资源.

所以得先解压, 再点击 Raw.


fd9653c58d804350b50602d1d26a2fa0.png

这样就得到了 HTTP 响应 :

ef7c138b210546f59708be58e70011cc.png


同样的 HTTP 响应也分四个部分 :


1.首行 :


5673b06249c5486aaf9b9376a0c9fe07.png


2.响应报头(header) :


3d82cbaadc2140c7b22e8915445cc126.png

3.空行 :

86acb0389ebc458da2feb5f24fe74c05.png


4.正文(此处正文是 html 代码)

6ed5d26c8b6f4f2f83e4d0e3d1778cc0.png



浏览器拿到 HTTP 响应的 html 了, 就可以显示了.


其实拿到的不仅仅是 html, 还有 css, js 等浏览器能显示出来的内容, 这些都是来自于服务器, 都是服务器返回的响应带给浏览器的.


总结 :


HTTP 请求及响应格式如下 :

91eb1a7e8ee241b483bc1061d38ad81a.png


相关文章
|
1天前
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
6天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验
51 28
|
4天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
92 25
|
7天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
133 18
|
23天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
25天前
|
缓存 网络协议 算法
从零开始掌握HTTP协议
本文介绍HTTP协议的演变,从HTTP1.0到HTTP2.0。HTTP1.0为无状态连接,每次请求独立;HTTP1.1引入持久连接、管道化请求和更多状态码;HTTP2.0采用二进制分帧、多路复用、头部压缩及服务器主动推送,大幅提升性能与用户体验。了解这些区别有助于开发者优化应用和服务。
|
25天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
94 1
|
Web App开发 前端开发 Android开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。
797 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead 当执行new Thread(Runnabler)后,新创建出来的线程处于new状态,这种线程不可能执行 当执行thread.start()后,线程处于runnable状态,这种情况下只要得到CPU,就可以开始执行了。
745 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
653 0