在浏览器地址栏输入URL,按下回车后究竟发生了什么?

面试题必问的题之一(重视!重视!重视)。在浏览器地址栏输入URL,按下回车后主要发生了以下六大步(以下图片来源-百度)

在浏览器地址栏输入URL,按下回车后究竟发生了什么?_第1张图片

详细讲解如下:

第一步:用户输入网址
第二步:进行DNS域名解析,将地址解析成ip地址
  1. 浏览器DNS域名解析;
  2. 系统(本地)NDS域名解析;
  3. 路由器DNS域名解析;
  4. 网络运行商DNS域名解析;
  5. 递归DNS域名解析;
    [外链图片转存失败,源站可能有防盗图片保存下来直接来源-Z5SV6whttps://k-16blog.csdnimg.cn/60c2703f089560)(图片来源-百度)]
第三步:建立TCP连接(TCP三次握手)
  1. 第一次握手:浏览器(客户端)向服务端发起,告诉服务求,我准备好了,请求建立连接,你也准备一下;
  2. 第二次握手:服务器向浏览器发起,告诉浏览器,我准备好了,我同意建立连接,你发送过来吧;
  3. 第三次握手:浏览器向服务器发起,告诉服务器,我发送了,你接受吧;
    在浏览器地址栏输入URL,按下回车后究竟发生了什么?_第2张图片
第四步:请求报文(发送请求)

在浏览器地址栏输入URL,按下回车后究竟发生了什么?_第3张图片

第五步:响应报文(响应请求)
第六步:HTML渲染
  1. 遇到HTML标签,浏览器会通知HTML解析器去进行解析,最终生成Token并生成dom树;
  2. 遇到style/link标签,浏览器会通知css解析器去进行解析,最终生成cssom树;
  3. 遇到script标签,浏览器会通识javascript解析器去进行解析,包括事件处理,操作dom,修改css等;
  4. 解析完成之后dom树和cssom树会生成一个渲染树,根据计算来实现页面布局;
  5. 最后渲染到页面;

在浏览器地址栏输入URL,按下回车后究竟发生了什么?_第4张图片

第七步:断开TCP连接(TCP的四次挥手)
  1. 第一次挥手由浏览器向服务器发起,告诉服务器,我请求发送完毕(请求报文),你准备关闭吧;
  2. 第二次挥手由服务器向浏览器发起,告诉浏览器,我收到请求了(请求报文),你也准备关闭吧;
  3. 第三次挥手由服务器向浏览器发起,告诉浏览器,我的响应报文也发送完毕,你准备关闭吧;
  4. 第四次挥手由浏览器向服务器发起,告诉服务器,我收到响应了(响应报文),你关闭吧;

如有错误,欢迎指正~

你可能感兴趣的:(js,前端开发,js)