HTTP 协议格式大揭秘:Fiddler 助阵,网络交互全掌握!

HTTP介绍

HTTP是超文本传输协议(Hypertext Transfer Protocol)的缩写,是一种应用非常广泛的应用层协议

我们平时打开一个网站,就是通过HTTP协议来传输数据的.

HTTP不仅能传输文本,还能传输图片,视频,音频.......

当我们在浏览器中输入小米的"URL"(即网址),浏览器就给小米的服务器发送了一个http请求,小米的服务器返回了一个http响应, 这个响应结果被浏览器解析了以后,就展示成了我们看到的页面的内容(这个过程中浏览器就会给小米服务器发送多个HTTP请求, 服务器也会相应的返回请求,这些相应里面就包含了HTML,CSS,JacaScript,图像,字体等信息)

可以看到页面上方多出来了个 "https://" ,(HTTPS是HTTP协议的安全版本,主要目的是保护用户数据在网络传输过程中的安全性,防止数据被窃取、篡改或中间人攻击。(可以理解为HTTPS是HTTP的plus版本)).

理解-应用层协议

例一

假设你在一个购物网站(比如淘宝)上购物,这其中就涉及到应用层协议。

你在手机或电脑上打开淘宝应用(就相当于一个客户端),然后你搜索一个商品,比如 “运动鞋”。当你点击搜索按钮时,你的客户端就会按照一种事先约定好的规则(这就是应用层协议,比如 HTTP 协议)来构建一个请求。这个请求有点像你写了一张纸条给商店的店员,纸条上写着 “我想要查找运动鞋相关的商品”。

然后这个请求通过网络传输到淘宝的服务器上。服务器收到这个按照协议发来的请求后,就知道你想要搜索运动鞋。服务器根据自己的数据库查找相关商品的信息,之后它又按照协议(HTTP 协议)把搜索到的运动鞋的商品信息(比如图片、价格、描述等)构建成一个响应,就像店员把你要的商品清单写在一张纸上。

最后,这个响应再通过网络传输回你的客户端,你的淘宝应用接收到这个按照协议传输回来的响应后,就能够正确地解析这些信息,然后把运动鞋的商品列表展示在你的屏幕上。

在这个过程中,如果没有 HTTP 这种应用层协议规定好客户端和服务器之间如何构建请求、传输数据、解析响应等规则的话,你的客户端和淘宝服务器之间就无法准确地进行这样的交互,就像你和店员没有共同的语言(交流规则),你就没办法顺利买到东西一样。

例二

就像世界上不同国家的人如果没有统一的语言(比如英语作为一种国际交流语言),就很难进行交流一样。不同的应用程序如果没有应用层协议,就不知道如何互相发送和接收信息。应用层协议为所有的应用程序提供了一个统一的标准,这样不管是哪个公司开发的浏览器、邮件客户端或者文件传输软件,只要遵循相应的应用层协议,就能够在网络上进行有效的信息传递。

理解HTTP协议工作过程

HTTP协议,是一种典型的"一问一答"式协议;

当我们在浏览器中输⼊⼀个 "⽹址", 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对⽅服务器 收到这个请求之后, 经过计算处理, 就会返回⼀个 HTTP 响应.
事实上, 当我们访问⼀个⽹站的时候, 可能涉及不⽌⼀次的 HTTP 请求/响应 的交互过程.

我们可以通过浏览器的开发者工具观察到这个过程;

打开浏览器    按 F12 键进入开发者工具,切换到NetWork标签页,刷新即可看到下图的效果,每条记录都是HTTP响应

HTTP协议格式

借助抓包工具,可以观察到 HTTP请求/响应 的具体情况(抓包:获取通过网卡的数据并解析显示出来)

Fiddler抓包

这里我们使用Fiddler,官网链接如下:

Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com)icon-default.png?t=O83Ahttps://www.telerik.com/fiddler

1.首先,要确保电脑中退出了其他的代理类软件(vpn/浏览器插件)

2.开启Fiddler的HTTPS功能

点击 Tools ,然后点击Options...

点击HTTPS, 然后把没勾选的都勾选上,最后点击OK

首次使用会弹出一个框,点击 "是" 就可以了

只要启动Fiddler,抓包工作就开始了

左侧是抓到的http数据报的列表

点击其中某一项,右侧就会显示出请求和响应的基本情况

右上方,是请求的详情

右下方,是相应的详情(下方响应乱码是二进制,原本响应也是文本,此处二进制是压缩后的)

点击上方的 Raw 标签,就能显示出http请求和响应的原始模样

HTTP协议格式

HTTP请求:

  • 首行: 方法 + URL + 版本
  • 请求头:由一系列的键值对构成,键和值之间使用 ": " 分割; 每组属性之间使用\n分隔; 遇到空行表示结束
  • 空行: 请求头结束标记
  • 正文(body):有的请求有body,有的没有(比如,GET往往不带body,POST往往带body)

HTTP响应:

  • 首行: 版本号 + 状态码 + 状态码解释
  • 响应头: 每一行是一个键值对,不确定几行,以空行结尾,键和值之间用 ": " 分割
  • 空行:响应头结束标记
  • 正文(body) : 对于响应来说,正文通常是HTML/CSS/JavaScript/JSON/图片/英文/字体

为什么 HTTP 报文中要存在 "空行" ?

        因为HTTP协议没有规定报头部分的键值对有多少个,空行就相当于是报头结束的标志(或者是报头和正文之间的 "分割符")

        HTTP协议在传输层依赖于 TCP 协议,而 TCP 是面向字节流的,没有空行就可能出现"粘包问题"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值