性能测试基础---URL和HTTP协议
·URL和HTTP协议:
·URL构成:
URL是web应用进行资源访问的主要方式。一般来说,由五个部分构成:
示例:http://192.168.2.212/phpwind1/searcher.php?keyword=phpwind&type=thread
jdbc:mysql://localhost:3306/testingedu?enableUnicode=true
·协议:protocol,一般来说,在一个URL的起始部分,必然是协议,通常是冒号之前的内容。
一般来说,协议通常都是应用层的协议。
常见的应用层的协议有:
·http
·https http+ssl
·ftp
·smtp
·pop3
·mysql
·oracle
·sql server
·域名:domain、要访问的服务器的名称或者地址。
比如说:www.baidu.com
14.215.177.38
localhost
192.168.2.212
·端口:port、一般来说是跟在域名之后,格式为:"域名:端口"
端口是由服务器决定的,在服务器的配置文件中通常都会指定Listen属性,表示服务器通过该端口提供服务给客户来访问。
PS:如果服务器所用的端口和其所使用的通信协议是默认相关的,则用户在访问的时候,是可以不输入端口的。
常见的协议及其对应的默认端口为:
http 80
https 443or8443
ftp 21
smtp 25
pop3 110
PS:一般来说,此时我们通过URL地址访问到的就是服务器的容器路径。
比如说Apache的DocumentRoot、Tomcat的docBase属性所指定的地址。
我们平时所谓的部署,就是指将开发写好的应用(代码)放到服务器的容器路径下,然后就可以通过URL地址进行访问啦。
·路径:path,通常是指跟在端口之后的内容,有的时候又叫URI。
通常来说就是我们要访问的资源在服务器的根目录(容器目录)下的地址.
一般来说,通过path我们就可以知道我们做了什么事情,比如说是访问了什么资源,还是做了什么逻辑操作。
·URL地址参数:通常以问号作为连接符拼接在URL的最后。通常来说,在很多工具中,该部分是归类在URL或者URL的path部分的。
示例:?keyword=phpwind&type=thread
PS:该部分是键值对应的
采用的是&符号进行连接的。
除了少量的符号,其它特殊字符都是要做urlencode处理的。
浏览器对于URL是有长度限制的。
·HTTP协议详解
·HTTP:超文本传输控制协议。HypeText Transfer protocol
表示我们可以通过该协议传输任何文件的字节信息。
·http协议的特点:
·http协议是一种基于request(请求)和response(响应)的协议。
·http协议是一种简单、快速的协议。
·http协议是一种无连接的协议。
http2.0及以下版本,都是基于tcp协议来实现的。
所谓的无连接是指,http连接关闭,则对应的tcp连接也关闭。
http0.9及http1.0就是无连接的,又叫短连接的。。一个http连接对应一个tcp连接。
http1.1开始,默认就是长连接的,即一个http连接关闭时,对应的tcp连接是可以不关闭的。这个是通过信息头:Connection:keep-alive来实现的。
·http协议是一种无状态的协议。
但是随着人的需求的提升,对于应用我们赋予了更多的含义,不仅仅满足于资源这个定义。请求和请求之间开始建议依赖,最终就引入了类似于Session和Cookie这样的技术来实现状态的记录。
PS:最新的小心,http3.0将会基于UDP协议来进行通信。
·http协议的构成:
http协议由两个部分构成:http request、http response。
·http request:http请求,通常是由三个部分构成:request line、request headers、request body。
·request line:是指请求包的第一行内容,包含以下信息:
request method、request path、protocol/version
示例:GET /phpwind/ HTTP/1.1
·request method:请求方法,是http请求的必选的部分,如果不指定,则使用默认的请求方法get。常用的请求方法有:get、post、put、patch、delete、options、head、trace等。
如果使用的是get方法,则通常parameter会以键值对的方式封装在URL地址参数部分。
如果使用的是post方法,则通常parameter会以键值对的方式封装在request body 部分。
·request path:就是URL的path部分,标识资源或者操作的。
·protocol/version:协议和版本。
请求和响应使用的协议和版本必须一致。
·request headers:请求头,是指从第二行开始到第一个空行为止的部分。
PS:
·请求头的作用是客户端用来发送一些控制和交互信息给服务器的。
·请求头是键值对应的,格式为: "key:value1,value2"
·标准的请求头都是有自身的含义和作用的。
常用的请求头:
·User-Agent:用来告知服务器,客户端的环境的。通常服务器会通过该信息头来识别客户端是否是同一个客户端。而且session和cookie的存储也是和该信息头有关的。如果牵涉到请求之间的依赖,则该请求头建议添加。
·Cookie:cookie本身就是信息头的一部分,只是因为cookie的特殊作用,导致很多抓包工具将之独立出来。
·Content-Type:该信息头是用来告知服务器,客户端所发送的请求主体的数据组织格式。
该信息头的默认值为:application/x-www-form-urlencoded,即请求主体是标准的键值对格式:key1=value1&key2=value2....
目前来说,在实际工作中,除了该类型的数据,比较常见的有:
·application/json
·application/xml;charset=utf-8、text/xml
·multipart/form-data; boundary=---------------------------7e339301d063e
混合表单数据格式,多用于上传文件的情况。boundary叫分隔符,分隔符的值比实际的分隔符要少两个下划线。
对于该类型数据的处理,分为两种情况:
1、工具自己实现参数的封装,然后自动加该信息头,则我们只需要关注数据即可。
2、我们自己实现数据的封装,并且自己指定分隔符。
·request body:请求主体,即我们发送给服务器的body data。
通常来说就是第一个空行之后的所有内容。
内容和格式最终是由产品(应用)自身决定。我们只能去模拟,不能去改变格式。
a=1&b=2 和 {"a":1,"b":2}从技术角度来说这个是一样的,但是根据服务器来制定的规格来说,传的格式不一致,一个是键值对一个是json
·http response:http响应,通常也是由三个部分构成:response line、response headers、response body。
·response line:叫响应行,是指响应数据包中的第一行数据。包含以下信息:
protocol/version、response code、response message
示例:HTTP/1.1 200 OK
·response code:响应代码,又叫状态码(status code),是服务器用来标识服务器对于请求的处理状态的。该状态码仅仅反映的是服务器对于请求的处理的逻辑状态。
PS:状态码通常是由三位长度的数字构成,不同的状态码表示不同的含义,通常来说是以首位数字作为大的分类标识。
1xx:表示一些传递和交互的信息,多见于处理的中间过程,通常不可见。
2xx:表示成功,典型的就是200。
目前来说,绝大多数的应用,为了提升用户体验,都会在服务器端做状态判断处理,不论服务器实际的返回结果是什么,最终返回给客户端的可能都是200.
3xx:表示重定向,
典型的就是301、302、304等。
PS:1xx、2xx、3xx都表示服务器对于请求的处理,在逻辑上是正确的。换一句话说,就是服务器都是正常工作的,没有问题的。
4xx:表示客户端错误。
典型:
·400 发送的数据有问题(格式或者数据本身)
·401 认证,一般来说和token(auth头)等信息头的缺失有关。
·403 权限,一般来说是服务器或者资源的访问权限。
(服务器的配置,操作系统的文件访问权限)
·404 无法找到。
5xx:表示服务器错误。
PS:如果客户提交错误的请求方法、发送了错误的请求信息,其实都是有可能导致5xx的,因此一定要判断到底是封装的请求有问题还是服务器真的有问题。
·response message:响应信息,没有实际的意义,就是用来解释响应代码的。
·response headers:响应头,通常是第二行到第一个空行截止的部分。
格式、作用和请求头类似。
·response body:响应主体,通常是第一个空行之后的所有内容。
表示服务器响应给客户端的主体内容。
cookie为发送的数据,set-cookie为返回的cookie数据
·总结:
URL和http请求的构成影响的主要就是抓包和封装请求。
http响应的构成影响的是脚本的后续处理,比如说关联、比如说断言等。
PS:对于抓包工具来说,往往都会帮我们对抓到的数据包做解析,这只是为了更好的展示数据而已。。。如果要根据抓包数据去封装请求,建议看source或者raw格式的数据。
性能测试基础---URL和HTTP协议的更多相关文章
- django基础(web框架,http协议,django安装)
学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层 应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层 提供端口对 ...
- java web基础 --- URL重定向Filter
java web基础 --- URL重定向Filter httpRequest.getRequestDispatcher("/helloWorld").forward(httpRe ...
- Confluence 6 通过 SSL 或 HTTPS 运行 - 为 HTTPS 修改你的 Confluence 基础 URL
在你的浏览器中,进入 > 基本配置(General Configuration). 单击 编辑(Edit). 修改服务器的基础 URL 为 HTTPS.请参考文档 configuring t ...
- 基础url、相对url、绝对url
#基础url.相对url.绝对url #HTTP权威指南 34页 •绝对URL:包含了访问资源所需的全部信息,如:http://www.163.com/new.html •相对URL:去除基础的部分, ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
- JMeter之Http协议接口性能测试--基础
一.不同角色眼中的接口 1.1,开发人员眼中的接口 1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...
- 性能测试基础-SOCKET协议用例
1.首先在进行性能测试的时候,我们要了解软件的通信协议是什么,我们使用什么协议,如何去模拟.SOCKET协议主要应用于在C/S模式的系统. 作者本人已当初做过的C/S架构的系统做的脚本录制,在上面做脚 ...
- URL和HTTP协议(无图片)
URL...... 示例: http://localhost/phpwind/searcher.php?keyword=phpwind&type=thread 协议部分:一般是指URL中第一个 ...
- JMeter性能测试基础 (1) - 安装及简单使用
Apache JMeter是一款开源性能测试工具,全部功能使用Java编写,可用于进行性能测试.JMeter最初被设计用于Web应用测试,之后被扩展至多个测试领域. Apache jmeter 可以用 ...
随机推荐
- Python3 打包exe
cx_Freeze(不推荐) 以前只用 cx_Freeze 支持将 python3 打包成 exe ,示例如下: 在你要打包的 python 文件下新建这个 setup.py 文件: #!/usr/b ...
- mac ffmpeg mediainfo视频压缩
最近在开发官网,官网上放了一些视频,但是本宝宝拿到的都是100多.200多.300多兆的原视频,怎么把他们变成统统20兆呢?宝宝用了如下方法,很好用哟- 1.安装视频压缩工具下载ffmpeg brew ...
- 微信多开简单实现 WeXinMoreOpen.bat
新建一个 WeXinMoreOpen.bat 文件,内容如下 @echo off D: cd "D:\Program Files (x86)\Tencent\WeChat" sta ...
- javascript 从对象数组中 按字段/属性取最大值或最小值
var array=[ { "index_id": 119, "area_id": "18335623", "name" ...
- Windows多网卡路由设置
需要经常切换网络以满足不同的工作需求: 一会上生产线, 一会上测试机, 一会还要上外网查资料... 经常切来切去比较麻烦,可以尝试Windows的路由表 route ADD 64.0.0.0 MASK ...
- 【转帖】Intel AMD 龙芯2019年12月份最新产品线
Intel未来三代U集体曝光:14nm退回去了! https://news.cnblogs.com/n/651244/ 不过没搞懂 为啥中芯国际已经开始量产14nm了 龙芯为什么不用.. 3A4000 ...
- excel数据分析流程
1.获取数据 2.去掉空值.空行.重复行 3.去掉无用行,筛选出需要行 4.分组数据 5.数据排序
- java之spring之配置讲解
首先目录结构如下: 1. User.java package cn.sxt.vo; import java.util.Date; public class User { private String ...
- Java自学-数组 增强型for循环
Java 中如何使用增强for循环 增强型for循环在遍历一个数组的时候会更加快捷 步骤 1 : 增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class ...
- aria2 adduri
demo, ok import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handl ...