HTTP协议

一、Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,

当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

HTTP协议的主要特点可概括如下:

1).支持客户/服务器模式。

2).简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。

由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3).灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4).无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5).无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,

则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

URL解析

在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),

它是WWW的统一资源定位标志,就是指网络地址。HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

Web服务器根据接收到的请求后,向客户端发送响应信息。

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

URL的一般语法格式为(带方括号]的为可选项):

protocol :// hostname:port] / path / ;parameters]?query]#fragment

以下面的URL为例:

http://blog.sina.com.cn/s/blog_537ad6610102xtb1.html?tj=hist

1)、协议部分,代表页面使用的是http协议,在Internet中可以使用多种协议,如HTTP,FTP等等。在"HTTP"后面的“//”为分隔符;

2)、域名部分,blog.sina.com.cn,也可以使用IP地址作为域名使用如:192.168.55.14:8080,其中8080为端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须

的部分,如果省略端口部分,将采用默认端口80/tcp;

3)、虚拟目录部分,从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/s/”

4)、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,

那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“blog_537ad6610102xtb1.html”。文件名部分也不是一个URL必须的部分,如果省略该部分,

则使用默认的文件名

5)、锚部分:从“#”开始到最后,都是锚部分。锚部分也不是一个URL必须的部分(可以理解为定位)

6)、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,

又称搜索部分、查询部分。本例中的+6参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。”。参数可以允许有多个参

数,参数与参数之间用“&”作为分隔符。

二、HTTP协议结构

HTTP请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

格式如下:

<request-line>

<headers>

<blank line>

<request-body>

1、请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

最常用的方法有:

GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

2、请求头部

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

3、空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

4、请求正文

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-

Length。

HTTP响应消息

在接收和解释请求消息后,服务器返回一个HTTP响应消息。

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

报文格式:

<status-line>

<headers>

<blank line>

<response-body>]

1)、状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

2)、响应报头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

3)、响应正文

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码

post与get的区别

get请求:向服务端获取请求;数据放在URL里,有长度限制;

post请求:向服务端发送请求;数据放在body里,无长度限制;更安全

http接口返回json串:一种通用的数据类型

接口的返回值;

{
  "error_code": 0,
  "stu_info":
  {
    "id": 1,
    "name": "小马",
    "sex": ‘’女",
    "age": 18,
    "addr": "北京市", 
    "phone": "18830266157",
    "gold": 11212
   }
  ] 
}
测试接口调用演练

get接口

请求URL http://api.nnzhp.cn/api/user/stu_info

请求方式 get

请求参数

参数名 必选 类型 说明

stu_name 是 string 学生姓名

1)、直接用浏览器调用

2)、使用postman 调用

可以看到postman选择get方法的时候,body是禁用状态,get方法的http接口请求,一般数据都放到URL中。

返回的方式同样也是json串的形式;

3)、使用jmeter进行get方法的调用测试

创建线程组

添加HTTP请求

输入域名、URL、选择请求方法、添加key

添加查看结果树

执行接口

可以在查看结果树中查看执行结果及返回数据

post 请求接口

登录接口

请求URL http://api.nnzhp.cn/api/user/login

请求方式 post

请求参数 参数为key-value形式

参数名 必选 类型 说明

username 是 string 用户名

passwd 是 string 密码

登陆用户名:niuhanyang

密码:aA123456

返回参数说明

参数名 类型 说明

error_code int 错误编码,0为操作成功

login_info object 登录对象信息

userId int 用户id

sign string 签名

login_time string 登录时间

1)、postman 进行调用

post方法的参数是放在body中的,可以看到参数放到URL中是无效的

把参数放到body中在进行提交

放到body中,以key-value的形式进行传参,返回json串的形式,参照返回参数说明,可以看到登陆成功。

2)、用jmeter 进行调用测试

打开jmeter ->添加->threads->线程组

在线程组中添加->sampler->HTTP请求

输入域名、URL、选择方法为post 、输入参数

执行并查看结果返回值

添加学生信息接口

请求URL:http://api.nnzhp.cn/api/user/add_stu

请求方式 post

参数 ,入参是json类型

参数名 必选 类型 说明

name 是 string 学生姓名

grade 是 string 班级

phone 是 string 电话

sex 否 string 性别,如果不传,默认为男

age 否 string 年龄 ,不传默认为18

add 否 string 地址,如果不传默认为北京市昌平区

返回参数说明

参数名 类型 说明

error_code int 错误编码,1000为操作成功

msg string 提示信息

如上述描述,入参形式为json 的方式,则使用key-value的形式进行传参就不行了,如下:

现在我们用正确的入参方式进行调用

1)、postman调用

在postman中,选择方法为post,输入URL地址,在body中选择raw ,输入json串格式的参数

2)、使用jmeter调用接口

我们下面看一下jmeter如何进行调用

创建一个http请求,输入域名、路径、方法为post、在body data中输入json ,然后执行

可以在查看结果树中的请求项中查看请求报文内容

在响应数据中查看响应结果,执行成功

学生金币充值

请求URL:http://api.nnzhp.cn/api/user/gold_add

请求方式 post

参数 ,

该接口有权限验证,需要admin用户才可以做操作,需要添加cookie

cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign

参数名 必选 类型 说明

stu_id 是 int 学生id

gold 是 int 金币数量

返回参数说明

参数名 类型 说明

error_code int 错误编码,0为操作成功

msg string 提示信息

如上述描述,入参形式需要添加cookie

1)、postman进行调用,添加cookie的方式

cookie说的直白点就是保存在用户浏览器端的一个键值对

提到cookie肯定不能少了session,什么是session呢,session就是保存在服务器的一个键值对,一般session都是存在缓存里面,因为要经常用到,

要提升性能的话直接把session放到内存里面。

首先我们通过“获取学生信息”接口查看到学生的id信息,然后通过“登录”接口,获取签名的值如下:以test 用户为例:

查询出ID=2341

sign值为:cd2b43f1688e472e3a516b5a2c6831e8

现在为学生添加金币

2)、用jmeter进行接口的调用

用jmeter测试带cookie的http请求需要添加http cookie管理器

我们先看一下添加cookie的场合进行执行

可以看到没有添加cookie的场合,执行不成功

现在我们添加httpcookie管理器,右键添加->配置元件->HTTP cookie管理器

添加cookie的值

执行,查看请求的数据

获取所有学生信息

请求URL:http://api.nnzhp.cn/api/user/all_stu

请求方式 get

参数 ,需要添加header信息,key为Referer value 为http://api.nnzhp.cn/

返回参数说

参数名 类型 说明

error_code int 错误编码,0为操作成功

all_stu list 提示信息

1)、我们看一下不添加header,直接用浏览器地址栏访问的结果

如下,不添加header访问,提示来路不正确

2)、用postman进行调用,添加header信息,并进行调用

执行,结果显示所有的学生用户信息

3)、用jmeter进行调用测试

添加http请求

右键添加->配置元件->http信息头管理器

执行结果成功,显示学生信息

文件上传类型

请求URL:http://api.nnzhp.cn/api/file/file_upload

请求方式 post

参数

参数名 必选 类型 说明

file 是 file 文件

返回参数说明

参数名 类型 说明

error_code int 错误编码,0为操作成功

msg string 提示信息

1)、用postman进行调用,输入URL地址,key的类型选择file类型

选择文件进行上传

执行操作成功

2)、使用jmeter进行调用

执行,操作成功

三、总结

学会HTTP通讯协议,就可以通过网页来获取与上传信息,在其他的机器上的浏览器也可以同样的获取内容,勤加练习。

                                              改变自己,从现在做起-----------久馆

原文地址:https://www.cnblogs.com/zzw19940404/p/14039337.html