性能测试基础---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格式的数据。

posted @ 2019-09-29 09:21  沫笙*  阅读(446)  评论(0编辑  收藏  举报