GET 和 POST 其实都是 HTTP 的请求方法。除了这 2 个请求方法之外,HTTP 还有 HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS 这 6 个请求方法。所以HTTP的请求方法共计有 8 种,每个请求方法和描述如下:
-
GET 请求指定的页面信息,并返回实体主体。
-
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
-
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
-
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
-
DELETE 请求服务器删除指定的页面。
-
TRACE 回显服务器收到的请求,主要用于测试或诊断。
-
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
-
OPTIONS 允许客户端查看服务器的性能。
“Http”协议称为是“超文本传输协议”(HTTP-Hypertext transfer protocol)。它定义了浏览器怎么向万维网服务器请求万维网文档,以及服务器怎么样把文档传送给浏览器,从层次的角度看,Http是面向应用层协议,它是万维网能够可靠的交换文件的重要基础,并且详细的规定了客户端浏览器与服务器之间互相通信的规则。
Http是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件等)
-
客户端发送给服务器的”信”,我们称之为”请求协议”。
-
服务器端发送给浏览器的”信”,我们称之为”响应协议”。
注意:使用HttpWatch、fiddler、charles等抓包工具可以抓取HTTP协议的内容。
3、GET和POST的请求方法如何使用?要知道请求方法如何使用,我们首先需要了解 HTTP 的请求报文结构,HTTP 的请求报文结构由3部分组成,分别是请求行、请求头、请求数据组成。
请求行: 由请求方法(Method)、URL 字段和 HTTP 的协议版本组成,注意其中的空格、回车符和换行符均不可省略,所以我们的请求方法实际上就是位于请求行中的了。
请求头部: 位于请求行之后,个数可以为 0~若干个,每个请求头部都包含一个头部字段名和一个值,它们之间用冒号":" 分隔,在最后用回车符和换行符表示结束。
请求数据: 如果请求方法为 GET,那么请求数据为空。它主要是在POST 中进行使用,适用于需要填表单(FORM)的场景。
HTTP 的 GET 请求报文是什么样的,我们这里可以访问https://api.github.com/search/users?q=JakeWharton 为例,通过抓包我们得到的请求报文如下所示:
GET/search/users?q=JakeWharton HTTP/1.1 Host: api.github.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/73.0.3683.86 Safari/537.36 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3 Accept-Encoding: gzip,deflate, br Accept-Language:zh-CN,zh;q=0.9 Cookie:_octo=GH1.1.1623908978.1549006668; _ga=GA1.2.548087391.1549006688;logged_in=yes; dotcom_user=GoMarck; _gid=GA1.2.17634150.1554639136; _gat=1
我们重点看到:
- 请求行:GET/search/users?q=JakeWharton HTTP/1.1
- 请求方法:GET 请求
- URL:/search/users?q=JakeWharton
- 协议:HTTP1.1
请求行下面部分全都是请求头部,我们可以看到host 为api.github.com,连接方式为长连接等信息。值得注意的是我们这个例子中是不存在请求数据的。
POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type:application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley
可以看到请求行中
请求方法:POST
URL :空
协议版本:HTTP1.1
它和上面 GET方法例子不一样的地方在于它的请求参数是位于请求数据中的,可以看到name=Professional%20Ajax&publisher=Wiley 就是它的请求数据。并且我们要注意到在请求数据和请求头之间是空出一行的,这是必不可少的。
4、Http的主要特点-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
-
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
-
支持B/S及C/S模式。
(1)get请求即请求的数据会附在 URL 之后(放在请求行中),以 ? 分割 URL 和传输数据,多个参数用 & 连接。
(2)根据 HTTP 规范,GET 用于信息获取,而且应该是安全和幂等的 。
(3)安全性指的是非修改信息,即该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用,也就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
(4)幂等性 (Idempotence) 则指的是无论调用这个URL多少次,都不会有不同的结果的 HTTP 方法。而在实际过程中,这个规定没有那么严格。例如在一个新闻应用中,新闻站点的头版不断更新,虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。
(5)GET 是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,以求更快地展示数据。
(6)GET 方法的 URL 一般都具有长度限制,但是需要注意的是 HTTP 协议中并未规定 GET 请求的长度。这个长度限制主要是由浏览器和 Web 服务器所决定的,并且各个浏览器对长度的限制也各不相同。
(7)GET 方法只产生一个 TCP 数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应 200 ok(返回数据)。
最后下面是我整理出来的一份软件测试工程师发展方向知识架构体系图。
希望大家能在这个成长过程中收益良多。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好“不积跬步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。
由于CSDN上传图片大小有限,有需要的朋友可以关注我的公众号:程序员二黑,回复1,即可获取原图。
下面是一份配套的软件测试资源包:
上面是一些配套资源,这些资源对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。关注我的微信公众号:程序员二黑,即可免费获取!
最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。
如果您觉得文章还不错,请 点赞、分享、在看、收藏 一下,因为这将是我持续输出更多优质文章的最强动力!
精彩推荐在职阿里6年,一个29岁女软件测试工程师的心声
拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴
公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档