http协议详解


协议(protocol),是指通信双方对于通信的数据的组织格式、规程、含义等所作的约定。以tcp/ip通讯模型来说,通信的基本原理即自上而下层层封包,至下而上层层解包。常见的应用层协议则有http、https(http+ssl)、ftp、ssh、smtp、pop3。http协议即超文本传输协议,目前已有的版本:0.9、1.0 、1.1、 2.0。

http协议的基本特征

1、http协议是一种基于request(请求)和response(响应)的协议。
2、http协议是一种灵活的协议,允许传输任多种数据对象,传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
3、http协议是一种简单快速的协议。简单是指只需传送请求方法和路径就能通讯。快速是建立在无连接的基础上,所谓无连接,其实是指的短连接。http0.9和http1.0版本默认是短连接的,从http1.1开始,默认是长连接的。区分长连接与短连接则是通过请求头来达成:Connection,如果值为close,则表示是短连接。所谓短连接,是指一个tcp连接只对应一个http连接。如果值为keep-alive,则表示是长连接。所谓长连接,是指一个tcp连接之上,可以完成多个http连接。
4、http协议是一种无状态的协议。即每个请求都是完全独立的,每个请求包含了处理这个请求所需的完整的数据,发送请求不涉及到状态变更。

http协议解析

http协议是由两个部分构成:http request、http response。

一、http request

http请求,一个http请求通常是由三个部分构成:request line、request headers、request body

1、request line

请求行,是指请求数据包中的第一行内容,通常包含以下信息:request method、request path、protocol/version
示例:
GET /vip6/test.php?data=xzf HTTP/1.1
GET http://10.10.10.244/phpwind/searcher.php?keyword=phpwind&type=thread HTTP/1.1

(1)request method

请求方法。一个http请求是必须有请求方法,如果不指定,则默认的请求方法为get。常用的请求方法有:get、post、put、delete、patch、options、header、trace。请求使用何种方法,是由产品、接口、开发来决定。
get和post方法:
.get和post方法都是请求方法,都可以用来向服务器发送请求、携带数据。
.使用get方法发送数据,数据是位于url地址参数部分
.使用post方法发送数据,数据是位于request body部分。反之,默认情况下,服务器也是根据数据所位于的位置来判断请求传递参数所使用的方法。
.由于浏览器对于URL长度的限制,通常web应用中,较大的数据都会使用post方法进行传递,而不是用get方法。
.get方法获取的资源在客户端是有缓存的,而是用post方法获取的资源在客户端是没有缓存的。这是post方法比get方法安全的根本所在。

(2)request path

请求路径,即URL中的路径部分,包含url地址参数 。

(3)protocol/version

协议/版本

2、request headers

请求头,是指从请求数据包的第二行开始,到第一个空行截至的部分。请求头是客户端用来和服务器进行交互的,主要用于信息、控制信息的交互,通常和要实现的业务本身没有直接关系。
(1)请求头是键值对应的,格式为: key: value
(2)不同的请求头代表不同的含义,有一些请求头是具有特定的作用的。
(3)比较重要的请求头:
User-Agent:该请求头必加。通常接口测试工具都会自动添加该请求头。服务器很多时候会通过该信息头来识别请求的来源。
Referer:用来标识当前请求的来源,即当前请求的上一个请求。通常很少有服务器去使用该字段。
Content-Type:一旦request body中有数据,则该请求头必加。以实际抓包或者接口文档为准。
其它权限相关的请求头:cookie、author、token,cookie一般不需要处理,以jmeter为例,jmeter直接加一个cookie管理器即可自动管理。author和token是可能需要做关联来手动处理的。

3、request body

请求主体,是指请求数据包中从第一个空行之后的所有内容,即客户端发送给服务器的数据。请求主体的数据组织格式是非常灵活的,需要和信息头Content-Type保持一致。
常见的类型有:
application/x-www-form-urlencoded,键值对且做了urlencoding处理的数据
multipart/form-data;,混合表单格式,用于文件上传(也可以不用于文件上传)
plain/text,普通的文本字符串
application/json或者application/json;charset=utf-8,json消息体
application/xml,xml消息体
PS:具体使用何种类型的数据组织格式,是由抓包或者接口文档(好的接口文档是会指出格式的)决定。

二、http response

http响应,通常来说http响应也是由三个部分构成:response line、response headers、response body

1、response line

响应行,是指响应数据包中的第一行内容,包含以下信息:protocol/version 、response code、response message
示例:HTTP/1.1 200 OK

(1)protocol/version

协议/版本

(2)response code

响应代码,又叫状态码(status)。响应代码是服务器用来告知客户端服务器对于请求的处理状态。
状态码是三位长度的数字,根据首位数字的不同,可以分为五类:
·1xx:表示连接建立过程中的交互、控制信息。
·2xx:典型的就是200,表示服务器对请求处理成功。
·3xx:表示重定向。
PS:一般来说,1xx、2xx和3xx都表示请求成功。状态码仅仅表示客户端和服务器端通信的逻辑是成功的,不代表业务也成功。通常来说,所有的性能测试工具本身都是会对状态码进行检测,用来作为脚本(请求)是否成功的充分条件。
·4xx:表示客户端错误。典型:403、404
·5xx:表示服务器错误。典型:500、502
PS:在脚本调试阶段、一旦出现4xx或者5xx错误,则表示脚本运行失败。
通常来说,脚本失败的原因,很大可能性都是因为脚本本身的封装格式、数据不到位导致。

(3)response message

响应信息,是用来描述响应代码的。没有任何实际的意义。

2、response headers

响应信息头,是指响应数据包中从第二行开始,到第一个空行之前的所有内容。响应信息头是服务器用来告知客户端的一些交互、控制信息。现在很多系统中也会在响应信息头中包含状态信息,如token、csrf-token、set-cookie:

3、response body

响应主体,是指响应数据包中从第一个空行开始之后的所有的内容。响应主体一般来说就是服务器对请求的处理结果。通常来说,接口测试做关联、断言,都是和响应主体有关。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里有阳光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值