当我们在浏览器输入一个URL例如www.baidu.com时,浏览器首先把这个域名法送给DNS服务器,让他解析成IP地址,然后建立TCP连接,因为HTTP是基于tcp协议,之后才开始请求建立HTTp连接。
目前使用的HTTP协议大部分使用的是1.1.在1.1的协议里面,默认开启了Keep-Alive机制,这样建立起来的TCP连接,就可以在多次请求中复用。
HTTP的报文分为三个部分,第一部分是请求行,第二部分是请求的首部,第三部分是请求的正文实体。
第一部分:请求行
包括方法、URL、版本。URL就是www.baidu.com,版本是HTTP1.1。常用的方法包括GET、POST、PUT、DELETE。
对于访问网页来说最常用的是GET类型。GET就是去服务器获取一些资源,通常要获取的资源是一个页面,当然也有其他格式,比如是返回一个JSON字符串,具体返回什么是由服务端的实现决定的。
例如,在云计算中如果我们的服务器要提供一个基于HTTP协议的API,获取所有云主机的列表,这就会使用GET方法得到,返回的可能是一个JSON字符串。字符串里面是一个列表,列表里面是一些关于云主机的信息。
POST类型只要是给服务端一些信息,信息具体是什么会放在正文里面,正文的格式最常见的也是JSON。 在支付的时候,用户需要把“我是谁?我要支付多少钱?我要买啥?”这些信息高速服务器,就需要通过POST方法。在云计算里,需要把一些信息比如“需要创建多大的云主机?多少CPU多少内存?多大的硬盘”把这些信息放在JSON字符串里面,通过POST方法高速服务器端。
PUT类型的是向指定资源位置上传最新的内容。但是HTTP的服务器往往不允许上传文件,所以POST和PUT方法的作用都变成了把信息告诉给服务器。
在实际使用的时候,POST往往是用来创建一个资源的,而PUT是用来修改一个资源的。例如,云主机已经创建好了,对云主机打一个标签,说这个是生产环境的哪个是测试环境的,如果想要修改这个标签,就需要用到PUT方法。
DELETE类型的,使用用来删除一个资源的,比如要删除一个云主机,就会调用一个DELETE方法。
第二部分,请求方法GET,POST
GET和POST两种请求最直观的区别是:
GET把参数放在URL里面,POST把请求放在request body里面。
GET和POST是
参考文献
极客时间网络专栏