浏览器输入url之后发生了什么?

160 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

前言

大家好,我是小阵,身为一个前端小菜鸟,总是有一个飞高飞远的梦想,因此,每点小成长,我都想要让它变得更有意义,为了自己,也为了更多值得的人

开开心心学技术大法~~

开心

来了来了,他真的来了~

正文

浏览器输入url之后发生了什么?

老生常谈的一个问题,这里再正儿八经侃一遍。☺️

  1. 用户在浏览器中输入url

  2. url如果是域名+path则需要做域名解析

  3. 域名解析全称为dns域名解析,根本原理是本地存储的一份ip与域名的map缓存

  4. 这里的本地并只是单纯的指本机

  5. dns解析过程:

    1. 浏览器本地查找映射
    2. 本机查找映射,也就是本系统查找映射
    3. 当地网络代理商查询映射
    4. internet查询映射
    5. 上面任一步骤查到映射之后,都会将映射到的ip地址代替域名做真正的请求
  6. 通过目标ip请求到目标服务器

    1. 如果中间有代理服务器
    2. 代理服务器会再将ip做二次转发
    3. 如果是高防服务器,可能不止有二次转发,还会做其他处理
  7. 请求到目标服务器在会后跟服务器建立连接

    1. tcp三次握手

      1. 客户端告诉服务器我要请求了
      2. 服务器告诉客户端我收到你的请求信息了,你是否能收到我"收到请求后的确认请求"
      3. 客户端收到了服务端"收到请求后的确认请求"之后tcp三次握手过程就结束了
      4. 建立tcp链接通道,开始传输信息
    2. 传输信息完成之后,开始tcp四次挥手来断开链接

  8. 客户端接收到服务器的信息之后

  9. 我们按照页面初始加载来进行讨论

    1. 因此cdn本身也是个服务器,请求cdn上的html地址本身也是正常的资源请求
    2. 按照上面的流程走过之后,客户端拿到了html资源请求,然后依据html这个入口开始继续请求别的资源,比如css、js
  10. 依据html页面构建dom树并显示到页面上

  11. 依据css构建样式树挂在到指定dom

  12. 依据css树和dom树生成render树

  13. render树的生成需要有layout和paint的概念,也就是计算dom布局信息和刷样式

  14. css之后就是js

  15. 加载js文件之后首先通过浏览器引擎对js进行词法分析和语法分析

  16. 以上检查都通过之后才会进行预编译

  17. 预编译过程中会进行变量存储、执行环境划分、挂在全局变量、挂在局部变量等一系列初始化操作

  18. 之后是js的执行阶段,在刷过预编译阶段之后,所有的可执行function或其他(只是以function距离)正式进入执行阶段,比如自执行函数(或者其他某种情况下要执行的方法)

以上就是全部过程了,中间还牵扯很多细节,尤其是css和dom树的交叉渲染,js文件加载跟HTML、css的互相抢夺资源加载。

这些都还需要每个部分单独研究,如果只是为了理解其中的关键节点,以上基本就够用了。

结语

文章如有错误或不严谨之处,还望指出,感谢感谢!!!

加油!

往期好文推荐「我不推荐下,大家可能就错过了史上最牛逼vscode插件集合啦!!!(嘎嘎~)😄」