http是一个一去一回的数据对象,发送一个request然后返回一个response,从而形成一个完整的接口。实际上一个完整的http请求是有多个步骤的,只是被封装了起来。
理解http通信过程是有必要的,特别是在一些接口的性能能测试和安全测试方面。也有助于学习更底层更复杂的协议
1、DNS Lookup
DNS(Domain Name System),DNS Lookup是一个域名解析的过程,将一个域名转换为ip,在互联网中都是依赖于ip进行访问的,域名只是一个名称,为了便于记忆而产生。如果直接IP访问,那么就没有DNS Loopup这一步。另外一种情况,当短期内已经解析的域名,也会根据之前解析的缓存直接读取,跳过DNS Lookup的过程。
2、TCP Connect
即TCP连接,这个步骤只要是经过TCP传输连接的,都会有。相当于打开一个数据传递通道,http也是通过tcp进行传递数据,如果是新的连接,则这个过程是必然产生的,也称之为“三次握手”。如果是使用已有的tcp通道,则在http请求时不会有该步骤,这个依赖已经建立的连接过程一般叫做长连接。
3、HTTPS Handshake
即https握手过程,用于交换证书等一系列加密信息,只有https协议时会产生,而且必须有,且这个步骤只存在于每次新的tcp连接之后进行,对于已经连接或者复用之前已经做过握手过程的,将跳过该步骤。如果是普通http协议,则没有该步骤
4、HTTP Request Header
包含请求行和头信息,所有http的请求方法,都包含这些内容,所以在http通信过程中不可缺少。
5、HTTP Request Body
从常理来说,应该和上一步的header都是http request的数据,是完全可以合并一起发送的,但是比较规范的协议角度将他们分开,但这不影响任何的解析,对于get没有body的http请求方法,没有这个步骤。也是为什么会提到get速度相对快一些,但这个几乎是看不到的
6、HTTP response Header
和request相同,也是将header和body分开,header这个步骤是必须的,很多时候甚至只需要http状态码即可分辨结果
7、HTTP Response Body
在response header只有,继续发送response body内容,如果没有body,则跳过该步骤
8、TCP close
有链接的打开,也会存在tcp链接的关闭,如果协定了不关闭链接,比如http中的keep-alive逻辑,就会将链接保留在后续http请求的过程中再次利用。