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

一、HTTP是什么?

HTTP (全称为 "超⽂本传输协议") 是⼀种应用非常广泛的应用层协议
  1. 是一个简单的请求响应,运行在 TCP 之上。规定客户端发送什么样的请求以及得到什么样的响应。
  2. 请求和相应消息的头是以 ASCII 形式给出;而消息类容则已 MIME 格式

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

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

 二、HTTP的工作过程

       当我们在浏览器中输⼊⼀个 "网址", 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回⼀个 HTTP 响应.

 三、HTTP 协议格式

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 服务器之间交互的数据细节, 都是非常清楚的。
        代理就可以简单理解为⼀个跑腿小弟. 你想买罐冰阔落, 又不想自己下楼去超市, 那么就可以把钱给你的 跑腿小弟, 跑腿小弟来到超市把钱给超市老板, 再把冰阔落拿回来交到你手上. 这个过程中, 这个跑腿小弟对于 "你" 和 "超市老板" 之间的交易细节, 是非常清楚的.

 

3、抓包结果分析

以下是⼀个 HTTP请求/响应 的抓包结果
HTTP 请求

 

  • 首行: [方法] + [url] + [版本]
  •  Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的长度;
HTTP 响应
  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  •  Body: 空行后面内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个
  • Content-Length属性来标识Body的长度; 如果服务器返回了⼀个html页面, 那么html页面内容就是在body中.

四、协议格式小结

1、HTTP 请求

HTTP 交互主要分为两部分:
HTTP 请求
HTTP 响应
      这⼀去⼀来就完成了⼀次交互了,比如浏览淘宝的商品,点击某⼀个商品详情,请求里面有地址和参数,服务器查询数据之后把结果响应回来,然后浏览器再解析和渲染之后,用户就成功的看到商品详情了,这就完成了⼀次请求了。

2、请求地址 URL

平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统⼀资源定位符).

互联网上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处

理它.

URL 的详细规则由 因特网标准RFC1738 进行了约定.

(https://datatracker.ietf.org/doc/html/rfc1738)

  • ⼀个具体的 URL:
https://v.bitedu.vip/personInf/student?userId=10000&classId=100
  1. 1.https : 协议方案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:m ysql )
  2. 2.user:pass : 登陆信息. 现在的网站进行身份认证⼀般不再通过 URL 进行了. 一般都会省略
  3. 3.v.bitedu.vip : 服务器地址. 此处是⼀个 "域名", 域名会通过 DNS 系统解析成⼀个具体的 IP 地 址. (通过 ping 命令可以看到v.bitedu.vip 的真实 IP 地址为 118.24.113.28 )
  4. 4.端口号: 上面的 URL 中端口号被省略了. 当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.
  5. 5./personInf/student : 带层次的文件路径.
  6. 6.userId=10000&classId=100 : 查询字符串(query string). 本质是⼀个键值对结构. 键值对之间使用 & 分隔. 键和值之间使用 = 分隔.
  7. 7.片段标识: 此 URL 中省略了片段标识. 片段标识主要用于页面内跳转. 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值