XiZev / blog

record my learning of font-end
0 stars 0 forks source link

浏览器发起HTTP的请求流程 #14

Open XiZev opened 3 years ago

XiZev commented 3 years ago

HTTP协议,正是建立在TCP连接基础之上的。HTTP是一种允许浏览器向服务器获取资源的协议,是Web的基础,通常由浏览器发起请求,用来获取不同类型的文件,例如HTML文件、CSS文件、JavaScript文件、图片、视频等。此外,HTTP也是浏览器使用最广的协议。

在浏览器地址栏里键入地址:http://baidu.com, 那么接下来,浏览器会完成哪些动作呢?

XiZev commented 3 years ago

1. 构建请求

首先,浏览器构建请求行信息(如下所示),构建好后,浏览器准备发起网络请求

GET /index.html HTTP1.1

XiZev commented 3 years ago
  1. 查找缓存

    在发起网络请求之前,会先在浏览器缓存中查询是否有要请求的文件。 当在浏览器缓存中存有副本,它会拦截请求,返回该资源的副本,并直接结束请求,而不会再去源服务器重新下载。这样做的好处有:

当然,如果缓存查找失败,就会进入网络请求过程了。

XiZev commented 3 years ago
  1. 准备IP地址和端口

浏览器使用HTTP协议作为应用层协议,用来封装请求的文本信息;并使用TCP/IP作传输层协议将它发到网络上,所以 在HTTP工作开始之前,浏览器需要通过TCP与服务器建立连接。也就是说HTTP的内容是通过TCP的传输数据阶段来实现的,你可以结合下图更好地理解这二者的关系。

QQ截图20210825213605

首先建立TCP连接,需要用到IP地址和端口号,通过URL地址转换而来:

DNS(Domain Name System):域名映射为IP的系统。

所以浏览器会请求DNS返回域名对应的IP。当然浏览器还提供了DNS数据缓存服务,如果某个域名已经解析过了,那么浏览器会缓存解析的结果,以供下次查询时直接使用,这样也会减少一次网络请求。

HTTP协议默认是80端口。

XiZev commented 3 years ago

4. 等待TCP队列

Chrome有个机制,同一个域名同时最多只能建立6个TCP连接。 如果在同一个域名下同时有10个请求发生,那么其中4个请求会进入排队等待状态,直至进行中的请求完成。 当然,如果当前请求数量少于6,会直接进入下一步,建立TCP连接。

XiZev commented 3 years ago

5. 建立TCP连接

排队等待结束之后,可以和服务器握手了。 在HTTP工作开始之前,浏览器通过TCP与服务器建立连接。

XiZev commented 3 years ago

6. 发送HTTP请求

一旦建立了TCP连接,浏览器就可以和服务器进行通信了。而HTTP中的数据正是在这个通信过程中传输的。 QQ截图20210825214641