HTTP协议是建立在TCP连接的基础之上的,是一种允许浏览器向服务器获取资源的协议
如果你在浏览器输入一个网址,浏览器会完成以下几个动作
1. 构建请求
首先浏览器会构建请求行信息,构建好以后准备发起网络请求。
GET /index.html HTTP1.1
2.查找缓存
在发起请求前,浏览器会在浏览器缓存中查询是否有有该文件,如果存在则拦截请求,返回该资源的副本,并结束请求,这样即可以缓解服务器的压力又能够快速加载资源。否则进入网络请求过程。
3.准备IP地址和端口
在HTTP工作开始之前,浏览器需要通过TCP与服务器建立连接,也就是说HTTP的内容是通过TCP的传输数据阶段来实现的
如上图所示,请求第一步需要和服务器建立TCP连接,那连接需要的IP地址和端口号从何而来呢。基于这个需求出现了将域名和IP地址做映射的系统,叫做域名系统,简称DNS
拿到IP后就差端口号了,通常网址没有特别指定端口的话 默认是80端口
4.等待TCP队列
Chrome有个机制,同一个域名同时最多只能建立6个TCP连接,因此如果同一个域名下有10个请求发送,剩下4个会进入排队状态。
5.建立TCP连接
在排队结束后,就可以通过三次握手与服务器建立起连接了
6.发送HTTP请求
首先浏览器会向服务器发送请求行,包含请求方法、请求地址、HTTP版本协议,服务器接收到请求信息后对数据进行处理并返回响应行,包含协议版本和状态码,发送完响应头后服务器就可以继续发送响应体的数据。
7.断开链接
通常情况下,一旦服务器给客户端返回了数据,就要关闭TCP连接,不过如果浏览器或者服务器在其头信息中加入了
Connection:Keep-Alive
那么TCP连接在发送后依然保持打开的状态
因此一个完整的HTTP请求就如下图所示