zoukankan      html  css  js  c++  java
  • 从URL输入到页面展现到底发生什么

    这是日常面试会被问道的问题。

    大概步骤如下:
    DNS 解析:将域名解析成 IP 地址
    TCP 连接:TCP 三次握手
    发送 HTTP 请求
    服务器处理请求并返回 HTTP 报文
    浏览器解析渲染页面
    断开连接:TCP 四次挥手

    1.DNS 解析:将域名解析成 IP 地址
    浏览器通过向 DNS 服务器发送域名,DNS 服务器查询;到与域名相对应的 IP 地址,然后返回给浏览器,浏览器再将 IP 地址打在协议上,同时请求参数也会在协议搭载,然后一并发送给对应的服务器。

    2.TCP 连接:TCP 三次握手

    TCP三次握手过程:

    浏览器(也是客户端)去告诉服务器我要发送请求了。

    服务器告诉浏览器我准备接收了,你发吧。

    浏览器告诉服务器,我马上就发了,你准备接收吧。

    3.发送 HTTP 请求

    4.服务器处理请求并返回 HTTP 报文
    内容如上对于http的介绍。

    5.浏览器解析渲染页面

    浏览器解析渲染页面分为一下五个步骤:

    1.根据 HTML 解析出 DOM 树
    2.根据 CSS 解析生成 CSS 规则树
    3.结合 DOM 树和 CSS 规则树,生成渲染树
    4.根据渲染树计算每一个节点的信息
    5.根据计算好的信息绘制页面

    1.根据 HTML 解析 DOM 树
    根据 HTML 的内容,将标签按照结构解析成为 DOM 树,DOM 树解析的过程是一个深度优先遍历。即先构建当前节点的所有子节点,再构建下一个兄弟节点。
    在读取 HTML 文档,构建 DOM 树的过程中,若遇到 script 标签,则 DOM 树的构建会暂停,直至脚本执行完毕。
    2.根据 CSS 解析生成 CSS 规则树
    解析 CSS 规则树时 js 执行将暂停,直至 CSS 规则树就绪。
    浏览器在 CSS 规则树生成之前不会进行渲染。
    3.结合 DOM 树和 CSS 规则树,生成渲染树
    DOM 树和 CSS 规则树全部准备好了以后,浏览器才会开始构建渲染树。
    精简 CSS 并可以加快 CSS 规则树的构建,从而加快页面相应速度。
    4.根据渲染树计算每一个节点的信息(布局)
    布局:通过渲染树中渲染对象的信息,计算出每一个渲染对象的位置和尺寸
    回流:在布局完成后,发现了某个部分发生了变化影响了布局,那就需要倒回去重新渲染。
    5.根据计算好的信息绘制页面
    绘制阶段,系统会遍历呈现树,并调用呈现器的“paint”方法,将呈现器的内容显示在屏幕上。
    重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的重绘。
    回流:某个元素的尺寸发生了变化,则需重新计算渲染树,重新渲染。

    6.断开连接,TCP四次挥手

    1.浏览器发送给服务器,我请求报文发送完啦,你准备关闭吧。
    2.服务器告诉浏览器,我请求报文接收完了,我准备关闭了,你也准备吧。
    3.服务器告诉浏览器,我响应报文发送完了,你准备关闭吧。
    4.浏览器告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧。

  • 相关阅读:
    堆和栈的区别详解
    数组和指针背后——内存角度
    程序的运行时 数据结构
    连接MySQL数据库 ODBC DSN的配置
    SQL应该避免查询方式
    罗斯文(NORTHWIND )示例数据库和AdventureWorks示例数据库的安装
    敏捷个人:从中学到了什么?
    开发通用类 字符串加密、解密篇
    关于Session的灵活运用
    解决Ext.Combobox this.getRawValue() is undefined的错误
  • 原文地址:https://www.cnblogs.com/JiAyInNnNn/p/12177388.html
Copyright © 2011-2022 走看看