接口测试基础-了解http请求

大家一直都在说接口自动化,但对于接口测试的基础HTTP协议,你了解多少呢?

HTTP协议采用了请求/响应模型。客户端按照一定的规则请求,服务端响应对应的请求。HTTP协议的全名叫超文本传输协议,为英文HyperText Transfer Protocol,的缩写,是互联网上应用最为广泛的一种网络协议。

我作为APP测试人员,经常用fiddler抓包,比较好奇这些抓到的包,每项是什么含义,具体代表什么,那么我们就从一个fiddler应用每次打开默认的一个请求来学习下一个完整的HTTP请求包和响应包:

一、http请求包

请求行

第一行分别包含:请求方法、请求地址、请求协议;我们来一一了解。

1、请求方法

“GET”是请求方法里面的一种。根据HTTP标准,HTTP请求可以使用多种请求方法。

我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

我其实测试过程中见得最多的就是GET和POST,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息


请求方法                备注


GET    请求指定的页面信息,请求不包含实体,并返回实体主体。

HEAD    类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT    从客户端向服务器传送的数据取代指定的文档的内容

DELETE    请求服务器删除指定的页面

CONNECT    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS    允许客户端查看服务器的性能

TRACE    回显服务器收到的请求,主要用于测试或诊断

2、请求地址

https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False”,其实就是URL。

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

1)模式/协议(scheme):它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP),这个协议可以用来访问网络。如“http://”表示超文本传输协议资源,“https://”表示用安全套接字层传送的超文本传输协议,“ftp://”表示文件传输协议……

2)文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。“?”询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。

3、请求协议

“HTTP/1.1”,指的是请求协议。下面简单介绍三种版本的请求协议,目前无2.0版本,正在开发中。

HTTP/0.9 :只接受GET一种请求方法,没有在通信中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

HTTP/1.0 :第一个在通信中指定的版本号,至今被广泛采用,特别是在代理服务器中。支持上面说到的,三种请求方法: GET, POST 和 HEAD方法

HTTP/1.1 :当前版本号,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。相对1.0版本,HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

请求消息头

第二行以后均表示消息头,

User-Agent:中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

Pragma:是 HTTP/1.1 之前版本的历史遗留字段。“Pargma: no-cache”只能用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。 但要整体掌握全部中间服务器使用 HTTP 协议版本确实不现实的。因此,发送的请求会同时含有 Cache-Control: no-cache和 Pragma: no-cache。

Host:访问的http服务器的域名/IP 地址和端口号。在http 1.1中不能缺失host字段,如果缺失, 服务器返回400 bad request,http1.1中不能缺失host字段,但host字段可以是空值;在http 1.0中可以缺失host字段。

Accept-Language: 表示浏览器or客户端所支持的语言类型;

Referer:Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器以此可以获得一些信息用于处理。

Accept-Encoding: 浏览器支持的压缩编码。gzip,GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。

Connection: 表示客户端与服务连接类型; close表明当前正在使用的tcp链接在请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了

请求实体内容

上图中举的例子,实体内容为空行;原因是因为例子是get请求,是没有请求实体内容的。如果是post请求,实体内容一般格式如下:

name1=value1&name2=value2&name3=value3

二、http响应包

响应状态行

包含协议版本、状态码、原因短语,因为前面已经介绍了协议版本,在此不啰嗦,主要讲下状态码和原因短语:

用以表示网页服务器HTTP响应状态的3位数字代码,主要分为5类:

消息1xx(100~199,目前已经定义的有100~102):这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

成功2xx(200~299,目前已经定义的有200~207):代表请求已成功被服务器接收、理解、并接受。最常见的如:200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。

重定向3xx(300~399,目前已经定义的有300~307):这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

请求错误4xx(400~499,目前已经定义的有400~449):代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。最常见的如:404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。

服务器错误5xx、6xx:服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。最常见的如:500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理,一般来说,这个问题都会在服务器端的源代码出现错误时出现。

响应消息头

Cache-Control:指定请求和响应遵循的缓存机制。

Content-Type:定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件

Vary:Vary头域值指定了一些请求头域,这些请求头域用来决定当缓存中存在一个响应,并且该缓存没有过期失效,是否被允许去利用此响应去回复后续请求而不需要重验证(revalidation)

Server: 这个消息头提供所使用的Web服务器软件的相关信息。

其他几个字面意思能看懂,就不介绍了。

响应实体内容

大部分测试的平台,响应实体会以json格式返回,给前端处理。


未经授权,请勿转载,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,328评论 6 152
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,838评论 2 61
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,092评论 0 23
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82