什么是URL

      家有门牌号,公交车有线路号,银行账户有账户编号,个人有社会保险号,而 URL 就是因特网资源的标准化名称,URL 指向每一条电子信息,告诉你它们位于何处,以及如何与之进行交互。

统一资源标识符(URI)提供了一个简单、可扩展的资源标识方式。URL 是通过描述资源的位置来标识资源的,而 URN 则是通过名字来识别资源的,与它们当前所处位置无关。下图表示他们三者之间的关系:

python接口测试:2 http数据报文详细剖析_数据


URL组成


url语法:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  • 协议(scheme):访问服务器以获取资源时要使用哪种协议
  • 用户(user):某些方案访问资源时需要用户名和密码来认证(如 ftp),默认值是匿名用户
  • 密码(password):用户名后面可能要包含的密码,中间由冒号分隔
  • 主机(host):资源宿主服务器的主机名或点分 IP 地址
  • 端口(port):资源宿主服务器正在监听的端口号,每个方案都有默认的端口号,如 HTTP 的默认端口号为 80
  • 路径(path):服务器上资源的本地名,由一个斜杠将其与前面的 URL 组件分隔开来
  • 参数(params):参数为应用程序提供了访问资源所需的所有附加信息(如 type=d 表明访问的资源是个目录),参数为 key/value 对,URL 中可以包含多个参数,用分号分隔
  • 查询(query):用来查询某类资源,用问号与其他组件隔开,如果有多个查询,则用 & 隔开,如http://localhost:8080/login/index.php?username="zhangsan"&password="123456"
  • 片段(frag):对一个带有章节的大型文本文档来说,资源的 URL 会指向整个文本文档,但是我们可以根据片段来显示我们感兴趣的章节,片段表示一小片或一部分资源的名字,用 # 与其他组件隔开


url构成:

  • a.协议(必选):声明当前URL的通讯方式
  • b.服务器地址(必选):可以是主机名、ip地址、域名等等
  • c.端口号(可选):如果没有声明端口则一般默认端口是80
  • d.请求路径地址(可选):实际可以说是由两部分所构成,主要由请求的虚拟目录及请求的具体文件;例如:http://123.57.71.195:7878/themes/default/images/llq/02.png其中/themes/default/images该部分为虚拟目录,02.png为具体文件
  • e.请求参数:表示的是请求中所需携带的参数信息,参数可以直接显示在url中(请求头携带),也会通过请求体进行携带;然后该部分数据都是以键值对的形式存在,多个参数之间使用&连接;
  • 扩展了解:锚部分:表示的是参数#后面的部分内容;


什么是HTTP

HTTP是一个属于应用层的面向对象协议;其特点:

  • 1.支持客户端/服务器模式
  • 2.简单快速(由于HTTP协议简单、从而HTTP服务器程序规模小,因而通信速度就快)
  • 3.灵活:传输类型Content-Type可以是任意类型的数据对象;
  • 4.无连接、无状态:无连接的含义是限制每次连接只处理一个请求;无状态表示的是协议对于事务处理没有记忆能力。


HTTP请求报文与响应报文

HTTP请求报文

http请求主要是由三部分所构成:请求行、请求头、请求体

  • 请求行:请求方法+请求地址+请求协议版本
  • 请求方法:常用的方法:GET、POST、PUT、DELETE、TRACE、OPTIONS、HEAD等
  • HEAD:表示的是获取请求头的资源信息
  • PUT:表示的是将数据存储到服务器
  • TRACE:表示获取其追踪信息
  • OPTIONS:表示的是用于进行调试测试
  • CONNECT:表示当前的保留状态;
  • DELETE:表示的是删除操作;
  • POST其表现形式如下:
POST /login.action HTTP/1.1



username=admin&userpwd=admin888
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • GET其表现形式如下:
GET /login.action?username=admin&userpwd=admin888 HTTP/1/1
  • 1.
  • GET和POST的区别:

    1.GET请求的参数直接显示在URL中,而POST将参数显示在请求体中;

    2.浏览器中的地址栏的url地址是由长度限制的,POST携带的参数长度范围可以大于GET

    3.相对用户而言POST的请求方式要比GET请求方式数据更加安全         4.GET发送请求时只会提交一次数据,而POST需要提交两次数据(因为GET请求的参数是与URL一起发送给服务器直接处理,一次性发送,而POST是先讲head数据发送给服务器,服务器处理head后返回的响应状态如果是100的话,则会接受后续的请求并继续处理(第二次将body的数据发送给服务器));所以也就会有GET请求的效率要高于POST的请求;(相对的,实际情况一般不存在,因为人几乎感受不到)

  • 请求头:
  • connection:其值主要有两种类型:keep-alive:表示的是常连接(如果是此类型则表示客户端可以继续向服务器发送请求,且保持当前状态);close:表示当前会话结束;
  • content-length:表示的是请求体的文本长度;
  • cache-control:表示的缓存控制,缓存都是存在对应的声明周期,其值通常为age、max-age、min-age(单位默认是秒)还可以设置访问权限:private
  • content-type:表示的是文本类型:
  • 其值语法:type/subtype;params
  • type表示的是主类型,subtype表示的是子类型,params表示的是参数
  • 常用的文本类型:
  • text/html、text/xml、image/jpg、image/png、application/json.......
  • 常用的四种类型:
  • key1=value1&key2=value2.....
  • i.text/html:最常用的一种,表示的是返回一个html页面
  • ii.application/json:接口测试遇到最多的一种;表示的是返回数据的类型是json格式的;
  • iii.application/x-www-form-urlencoded:通常是针对需要提交表单所声明的文本类型;该类型的值语法:
  • iiii.application/form-data:这种类型的数据格式都是以分割线的形式进行表示的;通常应用在文件的上传和下载中。
  • 注意:针对于post请求,不同的工具、不同的框架其对应的文本类型不同的则决定着请求是否能够发送成功。
  • user-agent:表示的是声明当前客户端操作系统、浏览器相关的环境信息
  • accept:表示的是客户端允许进行解析的数据文本类型;如果是*/*的话则表示的允许接收解析所有文本数据类型;
  • referer:表示的是当前url请求所需参照的上一个请求地址信息;
  • Accept-Encoding: 其值主要有:GZIP、Deflate(无损加压):两者区别:gzip考虑的是容量、deflate考虑的是质量;一般为了提高数据的传输以及响应过程,所以都会将一些响应的数据进行加压传输;如果需要解码的话,则可以选择decode即可获取正常数据页面;
  • Accept-Language: 表示的是客户端允许接收的语言,默认是zh_cn;
  • cookie:也可以称之为网站cookie、浏览器cookie,还可以称之为httpcookie;是保存于用户客户端浏览器中;
  • cookie的类别:
  • a.session cookie:会话cookie:表示的是只会在当前会话期间有效,如果关闭浏览器的话,则其cookie会被删除
  • b.持久型cookie:表示的是长期在用户会话中是有效的;该有效当然也是根据cookie的生命周期而定的,主要是根据cache-control键值对进行声明(开发定义);它可以记录大多数用户的初始化或者自定义操作;(弱登陆状态)
  • c.安全cookie:主要是基于https协议下访问所产生的cookie形态;cookie从服务器传输到客户端,在客户端保存等整个过程会实现cookie的数据加密操作,那么这样就可以降低cookie的暴露以及被引用;
  • d.httponly cookie:相当于是设置成http only的cookie只能够在http(https)类型协议上发送请求传递;
  • e.第三方cookie:主要是用于进行采集用户的一些行为习惯和访问历史信息;
  • cookie的作用:
  • a.实现会话管理---->使用cookie获取登录态(使用实例cookie绕过验证码完成登陆)
  • b.记录用户操作行为
  • c.个性化信息
  • cookie的内容:
  • cookie的name、cookie的域、cookie的路径、cookie的创建时间、cookie的到期时间
  • 请求体:如果post请求的话,则会存在请求体信息,如果是get请求的话,直接是空白的;请求头与请求体之间有一行称之为空白行;


http响应报文:

  • 三部分:状态行(响应行)、响应头、响应体
  • 响应行:主要有协议/版本、状态码、状态
  • 状态码:
  • 1XX:表示的是提示信息,服务器已经接受了当前请求,期待下一步操作请求
  • 2XX:表示的服务器已经处理请求并将结果返回;代表状态码:200
  • 3XX:表示的是当前服务器已处理需要重定向代理到其他页面;代表状态:301、302、304
  • 4XX:表示的是客户端请求错误;代表状态码:403、404
  • 5XX:表示的服务器服务状态错误、处理错误;代表状态码:500
  • 响应头:与请求头相同
  • 响应体:响应头完后的空一行的第二行显示的响应体内容