剖析用户请求响应过程
从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)
简单版
平时上网浏览网页的原理。
你打开一个网站(比如www.baidu.com),
你的浏览器会先去检查你的本地Hosts文件,看看有没有指定域名的IP,
如果有就按照指定的IP访问,如果没有就去向你的DNS服务器获取 www.baidu.com 的IP,
DNS查找域名记录信息如果找到了就给你返回IP,找不到就会提示 DNS找不到域名;
获取到IP后,你的浏览器就会去访问网站服务器,
然后网站服务器把你要获取的网页数据返回回来,浏览器再进行排版显示。
详细版
从浏览器向一个特定的URL发送HTTP请求开始,
到浏览器接收到服务器的返回结果,
这段过程花费的时间就是用户的请求响应时间。
这个请求过程可以分为四个阶段:
1.建立连接:客户端与服务器建立连接;
2.发送请求:打开一个连接后,客户端把请求信息发送到服务器的响应端口上,完成请求动作提交;
3.返回相应:服务器在处理完客户端请求之后,要向客户端发送响应信息;
4.关闭连接:客户端和服务器端都可以关闭套结字来结束TCP/IP对话
请求过程看似很简单,而且往往是瞬间完成的,但是在实际执行中是经历很多的步骤。
整个过程可以做出以下的划分:
1.阻塞时间:包括所有的预处理的时间。比如Cache查找和等待网络连接时间;
当浏览器向服务器发出HTTP请求时,浏览器会首先查找在缓存(Cache)中是否已经有所需要的资源。如果缓存中存在所需的资源而且是可用的,则使用缓存中的资源,避免了一次HTTP请求;入股缓存中不存在所需的资源,则需要连接服务器,在HTTP/1.1协议下,网络连接时需要排队等待直到这个网络连接可用,所以就造成等待网络连接的时间消耗,我们在浏览多图片的网站时,图片迟迟还未加载出来就是在等待网络连接可用。
2.连接时间:指创建TCP连接到服务器或者代理服务器所花费的时间。
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接时通过TCP来完成的。HTTP是比TCP更高层次的应用协议,由于规则,只能在低层次协议连接建立之后才能进行更高层次协议的连接。因此需要首先完成TCP连接建立,一般TCP连接的端口是80。如果是要建立HTTPS的安全连接,那么还需要一个SSL握手过程,此时Keep-Alive连接就会被经常用到,用于保存请求连接,以免多次重复建立连接。
3.发送时间:指发送HTTP请求到服务器的时间。
这个时间长短取决于该请求发送的数据量的大小,例如,使用POST方式则会需要较长的发送时间。
4.等待时间:指花费在等待服务器响应消息的空闲时间。
这个值包括网络延迟和服务器处理请求的时间,同时它也无法通过前端优化的方法减少。
5.接收时间:指花费在从服务器读取相响应消息的时间。
这个值会受到从服务器返回的消息内容的大小、网络带宽和是否使用HTTP压缩等因素影响。
6.缓存读取:指花费在从浏览器缓存中读取内容或者304响应的时间。
304响应是与条件GET请求相关联的。如果客户端已经完成一个有条件的请求是允许的,但是这个文件并没有改变,服务器应该返回304状态吗。304状态吗一定不能包含信息主体,通常通过一个头字段后的第一空行结束。
from 简单剖析用户请求相应过程