浏览器从输入URL到界面显示一共经历了6个阶段

1. DNS(域名)解析

2. TCP连接(三次握手)

3. 发送HTTP请求

4. 服务器处理请求并返回HTTP报文

5. 浏览器解析渲染页面

6. 连接结束

1. DNS(域名)解析

一个网址到ip地址的转换,找到URL对应的IP。如www.xiaochongtec.cn到22.33.55.66。

DNS查找过程中若有对应IP则停止查找:浏览器缓存、系统缓存、路由缓存、ISP(互联网服务提供商) DNS缓存(DNS服务器)

2. TCP连接

拿到 ip 地址后,浏览器会向服务器发起TCP连接请求,通过三次握手建立TCP连接。

服务器为什么能接收到客服端发起的请求呢?

服务器监听原理:服务器通过 socket(应用层与TCP通信中间层),bind 和 listen准备好接收外来连接,此时服务端状态为Listen

三次握手:

1. 客户端向服务器发送SYN(同步)报文(SEQ=x,SYN=1),并进入SYN_SENT状态,等待服务器确认  (SENT:发送)

2. 服务器收到客户端的请求,向客户端回复一个确认消息(ACK=x+1);服务器向客户端发送一个SYN包(SEQ=y)建立请求连接,此时服务器进入 SYN_RECV 状态   (RECV:接收)

3. 客户端接收服务器的回复(SYN+ACK 报文),然后客户端也向服务器发送发送确认包,此包发送完毕客户端和服务器进入 ESTABLISHED 状态,完成 3 次握手。  (ACK:确认   ESTABLISHED :成立)

3. 发送HTTP请求

浏览器向服务器发送HTTP请求。一个HTTP又分为请求和响应两部分。

HTTP请求消息:由请求行(request line)、请求头(header)、空行和请求数据4个部分组成。

1. 请求行:请求方法 + URL + HTTP协议版本 组成。如:GET /index.html HTTP/1.1

2. 请求头:由关键字/值对组成。User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

3. 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头

4. 请求数据:请求数据不在GET方法中使用,而是在POST方法中使用。与请求数据相关的最常使用的请求头是Content-Type(Content-Type:application/x-www-form-urlencoded)和Content-Length

HTTP响应消息:由响应行、响应头、响应体三个部分组成。

1. 响应行:HTTP协议版本 + 状态码 + 描述 组成。如: HTTP/1.1 200 OK

状态码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。1xx:指示信息–表示请求已接收,继续处理。2xx:成功–表示请求已被成功接收、理解、接受。3xx:重定向–要完成请求必须进行更进一步的操作。4xx:客户端错误–请求有语法错误或请求无法实现。5xx:服务器端错误–服务器未能实现合法的请求。

2. 响应头:与请求头部类似,为响应报文添加了一些附加信息,描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

3. 响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码

HTTP特性:

1. HTTP是无连接:无连接意味着每次只能处理一个请求,服务器处理完客户端的请求并收到客户端应答后断开连接

2. HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型

3. HTTP是无状态:HTTP协议是无状态协议,表现为后续处理需要前面的信息,则它必须重传

4. 服务器处理请求并返回HTTP报文

服务器在接收到请求后,解析用户请求,知道了要调度那些资源文件,再通过相应的资源文件,处理用户的请求和参数,并调用数据库信息,最后讲结果通过web服务器返回给浏览器.

5. 浏览器解析渲染页面

解析过程6个步骤:解析HTML -> 创建DOM树 -> 解析CSS形成CSS对象模型 -> DOM树和CSS 结合构建渲染树 -> 布局 - > 绘制 -> 显示

渲染树:从DOM树的根节点开始遍历每个可见节点,让后对每个可见节点找到适配的CSS样式规则并应用,DOM 树不完全对应,display: none的元素不在渲染树中,而visibility: hidden的元素在渲染书中。display: none在DOM 树中

布局:对渲染树上的每个元素,计算它的坐标,称之为布局。包含宽高,位置,背景色等样式信息,我们常说的脱离文档流(可以随意设置宽高、不设置则给根据内容适应、不再给父元素汇报宽高),其实就是脱离渲染树,导致脱离标准流的元素:float元素,absoulte元素,fixed元素会发生位置偏移。

绘制:根据渲染树以及布局得到的几何信息,通过绘制得到节点的绝对像素。

显示:将得到的节点的绝对像素发送给GPU,展示在页面上

回流(重排)与重绘

回流(重排):当浏览器发现某个部分发生了页面布局和几何信息的变化,就需要倒回去重新渲染了,重新渲染,就又要经过布局计算可见节点在设备视口(viewport)内的几何信息,以及之后的绘制和显示将这些信息渲染在页面上。如:DOM操作(元素添加、删除、修改或者元素顺序的改变)

重绘:改变元素外观,但是不影响之前的位置,重新执行浏览器的绘制和显示过程。如: background-color(背景色), border-color(边框色), visibility(可见性)。浏览器会根据元素的新属性重新绘制一次(这就是重绘,或者说重新构造样式),使元素呈现新的外观。

"重绘"不一定需要"重排",比如改变某个网页元素的颜色,就只会触发"重绘",不会触发"重排",因为布局没有改变。但是,"重排"必然导致"重绘",比如改变一个网页元素的位置,就会同时触发"重排"和"重绘",因为布局改变了。

display:none、visibility:hidden和overflow:hidden的区别

1. display:none:隐藏元素,不占网页中的任何空间,让这个元素彻底消失(看不见也摸不着),由于会影响到网页的空间,所以会引起两次重排和重绘

2.  visibility:hidden:占据的空间还是存在的,该操作不会对页面有影响,所以只会引起一次重绘。

3. overflow:hidden:宽高把多余的那部分剪掉,会引起一次重排和重绘

4.脱离文档流和添加回文档这两次回流是无可避免的,但是中间的DOM操作,则是在渲染树之外进行的,因此不会产生任何的回流与重绘

html页面返回原理,浏览器输入URL到界面显示(HTML渲染)发生了什么?相关推荐

  1. 从浏览器输入URL到最终看到页面, 这其中经历了哪些过程 ?

    从网络原理来看 1. URL解析 2. 构造http请求 3. 构造完http请求就需要将数据传给传输层了 4. 网络层 5. 数据链路层 6.物理层 7. 路由器 8. 到达服务器的物理层 9. 解 ...

  2. 从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识

    前言 上一章我们说到了数据包在网线中的故事,说到了双绞线,还说到了麻花.这一章继续沿着这条线路往下走,说一些和cdn以及路由器相关,运营商以及光纤相关的小知识,前端同学应该了解一下的 目录 前言 1. ...

  3. 【网络】浏览器输入URL到展示页面全过程(含互联网协议及HTTPS简介)

    这里写自定义目录标题 前言 1.URL介绍 2.DNS查找 3.互联网协议 3.1 实体层 3.2 链路层 3.2.1 以太网协议 3.2.2 Mac地址 3.2.3 广播 3.3 网络层 3.3.1 ...

  4. 每天一道面试题 浏览器输入URL到页面呈现详细过程

    浏览器输入URL到页面呈现过程 1.当用户敲下回车的那一刻,浏览器会判断用户输入的是ip地址还是域名 2.如果是ip地址就直接访问,否则就会先解析域名 3.域名的解析会先从浏览器缓存中去查询,是否有之 ...

  5. 在浏览器中输入URL按下回车键后发生了什么

    在浏览器中输入URL按下回车键后发生了什么 [1]解析URL [2]DNS查询,解析域名,将域名解析为IP地址 [3]ARP广播,根据IP地址来解析MAC地址 [4]分别从应用层到传输层.网络层和数据 ...

  6. HTTP浏览器输入URL后发生了什么

    原文:"天龙八步"细说浏览器输入URL后发生了什么   慕课大神 本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应 ...

  7. Oppo面经:浏览器输入URL都发生了什么?

    1.讲一下Java的虚拟机 2.说说怎么能让虚拟机中的方法区直接爆满 3.讲一下Java的垃圾回收机制 4.把Java中的容器类都讲一下 5.Java中的锁是怎么实现的? 6.引用计数法有啥缺点呢 7 ...

  8. 在浏览器输入url回车之后发生了什么?

    在浏览器输入url回车之后发生了什么? 浏览器解析URL(https://www.baidu.com/dist/test.html),获得协议(https).web服务器名(baidu.com)和文件 ...

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

    浏览器输入url后发生了什么? 转载于:https://www.cnblogs.com/hellogiser/p/what-happened-after-url-was-typed-in-browse ...

最新文章

  1. ios button.imageview 和setimage的区别
  2. Uva673 平衡的括号
  3. MySQL第1天:整体目录
  4. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...
  5. Echarts组件 tooltip提示formatter函数
  6. zipkin 自定义采样率_分组,采样和批处理– Java 8中的自定义收集器
  7. java sql server连接字符串_关于Java:SQL Server的等效jdbc连接字符串
  8. 别光啃书了,这才是最前沿的机器学习(ML)技术路线!
  9. MyEclipse2014配置Git
  10. MySQL 5.7.27 MGR 单主/多主+ ProxySQL
  11. 在 Mac OS X 安装gcc编辑环境,make不能用时参考
  12. JS回调函数、真实举例
  13. 10个谷歌浏览器调试技巧
  14. 【回波损耗(dB)和电压驻波比(VSWR)之间的关系】
  15. ddqn玩flappybird
  16. 论文阅读(10) 基于吸力的推进是动物高效游泳的基础(2015)
  17. 影视剪辑高清视频素材怎么找?附全网视频下载工具使用教程方法
  18. python3个引号啥意思_Python中单引号,双引号,3个单引号及3个双引号的区别
  19. 免费获取百度网盘会员一天或七天的不限速网盘会员
  20. 微信红包算个毛 ——微信红包,仅仅是个游戏?!

热门文章

  1. SHA256 的C语言实现
  2. php 万分之一几率,那万分之一的概率啊……
  3. 邀请合作如何表达_适时表达想法 才有利于彼此的合作
  4. python迭代器举例_如何最简单、通俗地理解Python的迭代器?
  5. js br不生效_前端标注工具-AILabel.js
  6. tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题
  7. winform mysql 工具类_C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装
  8. 分析启动耗时 android,Android app启动耗时分析
  9. 【LeetCode笔记】剑指 Offer 57- II. 和为 s 的连续正数序列(Java、滑动窗口、二刷)
  10. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收