浏览器-输入url系列
Jonnzer Lv4

共是五个步骤

1 浏览器的搜索框

浏览器会根据输入的内容,去匹配是用对应的引擎搜索内容,还是直接跳转url。
详细的讲,就是

  • 搜索内容+默认搜索引擎,形成新的URL
  • 符合URL规则的话,在输入内容基础上加上协议,形成新的URL

2 dns解析

  • 自己的理解:路由解析,找到背后的ip地址,路由缓存,域名缓存,为什么第二次加载会更快,跟这个有关。
  • dns:一个域名与ip地址相互映射的分布式数据库
  • 我们无法记住的ip,那一个个长相平凡但是堆积在一起就是记不住的几个数字,是的,dns帮我们记住了。他以电话簿的形式,记住了许许多多的ip地址,映射到了所有网站上。
  • 在客户端输入 URL 后,会有一个递归查找的过程,从浏览器缓存中查找->本地的hosts文件查找->找本地DNS解析器缓存查找->本地DNS服务器查找,这个过程中任何一步找到了都会结束查找流程。
  • 本地dns服务器找不到的时候,去查询其他根dns服务器,顶级域服务器,权威dns服务器
  • 查找的过程是有优化的地方:
    • DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
    • 在域名和 IP 的映射过程中,给了应用基于域名做负载均衡的机会,可以是简单的负载均衡,也可以根据地址和运营商做全局的负载均衡。
    • 补充:域名与ip之间有映射关系,但是大多数情况下却不是一一对应的,我们可以将多个ip映射到同一个域名,因为用户是通过域名去进行访问的,具体访问哪个地址,则有DNS服务器的映射记录和一定的负载均衡算法来决定,用户拿到具体ip后再去访问,而这个过程对用户来说完全是透明的,通过DNS分流完成了第一步的负载均衡:

3 Https,ssl协议,Tcp建立连接

浏览器通过http/https协议,建立tcp连接,三次握手建立请求,传输连接建立完毕。

4 服务器处理请求,返回结果

服务器,解析请求头,对比是否过期字段,缓存字段,返回对应的状态码和内容。返回所有内容后,可以关闭连接了亲。

5 浏览器解析/渲染

dom树解析,转换css单位成通用单位,cssdom解析,绘制。优先视口。

  • 构建 DOM 树、样式计算、布局阶段、分层、栅格化和显示
    • 构建DOM树:html内容解析成DOM树(这里面用到HTML的parser)
    • css样式表,转为浏览器可以读懂的CSS规则树
    • 由DOM树和CSS规则树结合,隐藏不可见元素,创建render树,计算布局信息,包括所有元素的尺寸、位置、还有position、z-index、overflow
    • Painting: 绘制render树,绘制页面像素(这里就属于重绘了)
    • GPU绘制,显示到显示屏

小知识点:

  • 绘制 render 树的流程:

    • 从 DOM 树遍历可见节点
    • 对于每个可见节点,找到 CSSOM 树对应的节点样式规则,应用上
    • 组合生成 render 树
  • HTML的parser:

    • 转换:HTML编码成字符
    • 分词:给字符们打上标记Tokens
    • 词法:tokens转换成包含属性和规则的对象
    • DOM树创建

参考:

  • 本文标题:浏览器-输入url系列
  • 本文作者:Jonnzer
  • 创建时间:2020-03-13 15:03:39
  • 本文链接:https://jonnzer.github.io/2020/03/13/浏览器-输入url操作篇/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论