HTTP基础知识

一曲红尘心若向阳 2022-05-11 23:58:24

HTTP协议基础

下面我们用一张简单的流程图来展示 HTTP 协议基本架构,以便大家先有个基本的了解。

Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。

Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识别的响应的服务,常见的有 apache、nginx、IIS 等等 web 服务器

浓缩就是精华,看下最简洁的 HTTP 交互图:

下面对上图进行简单的分析:

请求行:由请求方法字段、URL 字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

请求头:请求头由 key/value 对组成,每行为一对,key 和 value 之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。

典型的请求头有:

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

Accept:客户端可识别的响应内容类型列表;星号* 用于按范围将类型分组。*/*表示可接受全部类型,type/*表示可接受 type 类型的所有子类型。

Accept-Language: 客户端可接受的自然语言

Accept-Encoding: 客户端可接受的编码压缩格式

Accept-Charset: 可接受的字符集

Host: 请求的主机名,允许多个域名绑定同一 IP 地址

connection:连接方式(close 或 keeplive)

Cookie: 存储在客户端的扩展字段

空行:最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。

请求内容:请求内容主要用于 POST 请求,与 POST 请求方法配套的请求头一般有 Content-Type(标识请求内容的类型)和 Content-Length(标识请求内容的长度)

响应报文:HTTP 响应报文由状态行、响应头、空行和响应内容 4 个部分构成。如下图所示

下面对响应报文格式进行简要的分析说明:

状态行:由 HTTP 协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。

状态码:由 3 位数字组成,第一位标识响应的类型,常用的 5 大类状

态码如下:

1xx:表示服务器已接收了客户端的请求,客户端可以继续发送请求

2xx:表示服务器已成功接收到请求并进行处理

3xx:表示服务器要求客户端重定向

4xx:表示客户端的请求有==非法内容==

5xx:标识服务器未能正常处理客户端的请求而出现意外错误

常见状态码说明:

200 OK: 表示客户端请求成功

400 Bad Request: 表示客户端请求有语法错误,不能被服务器端解析

401 Unauthonzed: 表示请求未经授权,该状态码必须与WWW-Authenticate 报文头一起使用

404 Not Found:请求的资源不存在,例如输入了错误的 url

500 Internal Server Error: 表示服务器发生了不可预期的错误,导致无法完成客户端的请求

503 Service Unavailable:表示服务器当前不能处理客户端的请求,在一段时间后服务器可能恢复正常响应头

一般情况下,响应头会包含以下,甚至更多的信息。

Location:服务器返回给客户端,用于重定向到新的位置

Server: 包含服务器用来处理请求的软件信息及版本信息Vary:标识不可缓存的请求头列表

Connection: 连接方式。

对于==请求端==来讲:close 是告诉服务端,断开连接,不用等待后续的求请了。keeplive 则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。对于==响应端==来讲:close 表示连接已经关闭。keeplive 则表示连接保持中,可以继续处理后续请求。Keep-Alive 表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间(秒),例如 300 秒,应该这样写 Keep-Alive: 300

空行:最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。

响应内容:服务端返回给请求端的文本信息。

学习、研究 jmeter 之前,深入了解 jmeter 的基本组件及其作用是必须的。接下来我们开始讨论基于 jmetere 进行性能测试必须掌握的组件,以便大家逐步掌握 jemter 的核心基本能力。下面的几个组件是入门 jmeter 必须掌握的:

Thread Group

Samplers

Listeners

Configuration

Thread Group( 线程组)

线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。

在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。例如,如果你设置线程数为 100,那么 jmeter 将创建并模拟测试100 个用户请求到服务器端。

如下图所示:

我们常用的 jmeter 测试有 HTTP、FTP、JDBC 协议,以及其他各种支持的协议。

在 jmeter 中 Samplers 组件已经实现了哪些协议的支持。如下图所示:

BeanShell Sampler

这个组件元素允许我们在 jmeter 中写 Bean Shell 脚本,写这个脚本有什么作用?意味着你可以完全的控制和实现自己的需要。灵活定制,自然也就有难度,你得有点脚本功底。

参见图说明:

注:每一个 Sampler 都有自己独立的 beanshell 解析器,并且sampler 只能在自己的线程中调用(意味着不可跨线程使用)。

FTP Request

FTP Request 元素提供了测试 ftp 服务器的能力,这个元素让我们能够去测试 ftp 的上传、下载功能。下面我们看一下 ftp 元素的基本配置说明:

注:我们经常在 windows 和 linux 直接通过 ftp 进行文件传输,建议勾选 Use Binary Mode,避免编码问题。

HTTP Request

HTTP Request 提供了 HTTP/HTTPS 协议的测试支持能力。了解下基本的功能。

Java Request

Java Request 提供了测试 java API 的支持,但要注意要测试的

java API 需要有对应的测试类,该测试类必须继承AbstractJavaSamplerClient。

示例如下:

待测类 Sum; -> 生成 sum.jar

继承至 AbstractJavaSamplerClient 的测试类 Class

TestSum(AbstractJavaSamplerClient) -> 生成 testSum.jar

==注:==

一个 java 测试应该要实现以下几个方法,以便 jmeter java sampler 可以正确调用:

Listeners( 监听器)

在 jmeter 中 Listeners 提供了执行结果生成和显示能力的支持,提供了树形结构、表、图形和日志方式。下面我们先看下几种结果显示示例图。

图形模式:

1 阅读:511
一曲红尘心若向阳

一曲红尘心若向阳

没有做错什么,错在什么没做