学掌门——HTTP协议的基本格式和fiddler的用法

HTTP协议抓包工具使用指南

1. 主流抓包工具介绍

Fiddler的用法

Fiddler是一个专门对HTTP/HTTPS协议进行抓包的工具。下载安装好Fiddler后,需要打开"Tools"->"Options"进行数字证书的安装,用于抓取HTTPS协议的包。注意:如果不安装证书,就只能抓HTTP协议的包。

证书安装完成后,抓取报文时,左边是抓到的HTTP报文,右边是HTTP报文的请求和响应(右侧上方是请求,右侧下方是响应)。抓取到报文后,我们需要关心的就是左侧图标是两个箭头这样的报文。可以点击"Raw"查看原始数据,可以通过点击右侧"View in Notepad"按钮,使用记事本打开,查看详情。

Sniff Master抓包大师

Sniff Master是一款功能强大的网络抓包分析工具,与Fiddler类似但提供了更直观的用户界面和更丰富的分析功能。它支持实时监控网络流量,能够自动识别和解析多种协议格式,特别适合开发者进行API调试和网络性能分析。

Sniff Master的主要特点包括:

  • 支持HTTP/HTTPS协议抓包
  • 提供请求/响应时间线分析
  • 内置JSON/XML格式化工具
  • 支持请求重放和修改功能
  • 提供详细的性能指标统计

2.HTTP协议格式

HTTP协议是文本格式的协议,因此HTTP请求和响应里面的内容都是字符串。HTTP响应经常会被压缩,解压缩之后,通常只能看到二进制数据,这样做是为了节省网络带宽。下面介绍下HTTP协议的格式:

HTTP请求:

  1. 首行
    首行是指HTTP请求的第一行,包含三个内容,使用空格分割;
    1)GET:指的是HTTP请求中的方法;
    2)URL:唯一资源定位符,描述了资源在网络上的位置;
    3)HTTP/1.1:HTTP协议的版本号

  2. 请求头(header)
    是一组键值对的数据,每个键值对占一行,键和值之间使用冒号空格(: )来分割,这里的键和值都是属于标准规定的;

  3. 空行
    请求头结束的标记;

  4. 正文(body)
    有的请求HTTP请求有,有的HTTP请求没有;

HTTP响应:

  1. 首行
    指HTTP响应的第一行,也包含三个部分:
    1)HTTP/1.1:协议版本号
    2)200:状态码,描述了请求的结果
    3)OK:状态码描述

  2. 响应头(header)
    和请求头一样,也是由多个键值对组成,每个键值对占一行,键和值之间使用冒号空格(: )分割,同样键和值也都是标准规定的;

  3. 空行
    响应头结束标记;

  4. 正文(body)
    空行下面就是正文,正文的内容可能会比较长,其中可能包含多种格式的数据,如:HTML,CSS,JS,JSON,XML,图片,字体,音视频等;

3.HTTP协议中的方法

  1. GET方法
    HTTP协议中最常用的方法,用于获取服务器的某个资源。使用GET方法,通常是将发给服务器的数据加到URL的query string中,body为空。

  2. POST方法
    POST方法通常用来登录及上传文件。通常是把发给服务器的数据加到body中。

  3. 其它方法
    HTTP协议的其它方法还有PUT,HEAD,DELETE,OPTIONS,TRACE,CONNECT,LINK,UNLINE。这些方法最初是为了表示不同的语义,但是实际在使用的过程中,用法比较随意。目前就重点掌握GET和POST。

  4. GET和POST的区别
    GET和POST没有本质区别,双方是可以互相替换的。但是在使用习惯上,存在差异。GET经常把发送给服务器的数据,放在query string里面,POST则是经常放在body中,但这种情况不是绝对的,GET也可以使用body,POST也可以使用query string,关键是客户端和服务器要按照相同的方式处理数据。另外GET和POST存在语义上的差异,GET通常用于获取数据,而POST通常用于提交数据,比如登录和上传。

关于幂等性,GET请求,RFC标准文档中建议做成幂等的,实际上使用中也有做成不幂等的情况。也有"GET请求是幂等的,POST请求不是幂等的"这样的说法,实际上不太准确。如果GET请求是幂等的,那么它是可以被浏览器缓存的,而POST请求因为不具备幂等性,因此不可以被缓存。如果GET请求幂等的,那么它可以被浏览器收藏,而POST请求因为会丢失body的原因,则不可以。

4.Header中重点键值对的介绍

HOST:表示服务器主机的地址和端口。通常在URL中也存在,如果使用代理,HOST的内容和URL中可能是不同的。

Content-Type:body中数据的格式,可以有多种选择。请求可以有:json,form表单,和form-data的格式;响应可以有html,css,js,json,图片等;给服务器提交的请求,Content-Type不同,服务器的处理数据的逻辑也不同,服务器返回数据给浏览器,也需要设置合适的Content-Type,浏览器接根据Content-Type不同,也会做不同的处理。

Content-Length:body中数据的长度因为HTTP协议是基于TCP传输的,因此会涉及到"粘包问题",多个HTTP的请求就会在TCP的接收缓存区中挨在一起,接收方进行解析的时候,就需要清楚的直到边界。如果请求中没有body,则可以通过判断空行分割,如果请求中有body,就需要通过空行和Content-Length分割。

User-Agent(简称UA):描述了操作系统的版本以及浏览器的版本。

Referer:描述了当前页面是从哪个页面跳转过来的,如果直接输入URL搜索,则没有Referer;

Cookie:可以认为是浏览器在本地存储数据的一种机制;Cookie往往是从服务器返回的数据,或者页面生成的数据,也是按照键值对的形式组织的,这里的键值对不是标准定义的,往往是开发者自定义的,类似于query string;

5.响应状态码

表示这次请求对应的响应的状态。通常1开头表示消息,2开头表示成功,3开头表示重定向,4开头表示请求错误,5开头表示服务器错误;

常见状态码:

  • 200:OK,表示访问成功;
  • 301:Moved Permanently,表示永久重定向;
  • 302:Moved Temporarily,表示临时重定向;
  • 403:Forbidden,表示没有权限;
  • 404:Not Found,表示资源不存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值