http请求流程
我们以输入www.baidu.com为例,详细介绍浏览器发送http请求流程。
# 浏览器端发送Http请求
# 1.构建请求
首先浏览器会根据你所输入的地址构建请求信息,准备发起网络请求
# 2.查找缓存
在发起网络请求之前,浏览器会检查本地是否有所需要请求的缓存,如果有,他会直接拦截该请求,并使用缓存中的文件,这样可以大大增加网站的响应速度,提升性能,不必每次请求都需向服务器发送请求,减少服务器压力。
# 3.准备IP地址和端口号
上一步缓存查找失败后,就会进入网络请求。我们开始输入的地址是www.baidu.com,在请求过程中,数据包是通过IP地址找到服务器,这时候通过域名系统,也就是请求DNS返回与域名相对应的IP,当然浏览器也具有DNS数据缓存服务,如果某个域名已经被解析过了,就会减少一次网络请求,直接解析缓存的结果。
最后需要获取到端口号,通常情况下,Url没有特别指明端口号,所以默认就是80端口。
# 4.等待TCP队列
当我们准备好IP地址和端口号之后,接下来可能就会建立TCP连接了。
为什么是可能呢?Chrome有一个机制,同一个域名下最多只能建立6个连接,如果在同一时间发送了7个请求,那么我们需要等待,直至请求完成。
如果小于6个,那么可以直接进行下一步了。
# 5.建立TCP连接
以上所有请求完毕后,便会建立TCP连接,将数据包发送给服务器。在这里我们再详细说一下TCP是如何工作的,如果清楚的话我们可以直接看下一步。
TCP在传输的过程中,可能会遇到大文件,而这时候会将其拆分成很多小文件方便传输。被拆分成小文件后,我们发送到接收端,需要对其按照原来顺序进行重组,那么TCP在传输过程中将会携带用于排序的序列号,方便重排数据包。同时在发送的过程中我们可能会遇到数据包丢失的情况,TCP为我们提供了重传机制,他会检测如果在规定时间内没有接收到接收端所返回的信息,那么他将会判断该数据包丢失,会重新发送。
了解了TCP之后,再来延伸一下UDP协议,UDP协议相对TCP协议的优点是速度快,但是他完全不管数据包的死活,他只负责将数据包传输,不会去检测你是否丢失。以及如果你传输的是一个大文件,被拆分成好多小的文件传输过去,他并不会记录序列。也就是说小文件传输过去后,他不知道怎么组装还原了。
# 6.发送Http请求
一旦建立了TCP连接,浏览器就可以和服务器进行通信了。