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

1.fiddler的用法

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

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

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):描述了操作系统的版本以及浏览器的版本,如下图:

系统版本:Windows NT 10.0; Win64; x64

浏览器版本:Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0

早期是为了区分浏览器的版本,现在主要为了区分PC端和移动端。

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

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

键值对之间使用分号空格(; )分割,键和值之间使用=分割。常见的Cookie有:上次访问时间,用户身份信息,累计访问次数等;

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、付费专栏及课程。

余额充值