html页面返回原理,浏览器输入URL到界面显示(HTML渲染)发生了什么?
浏览器从输入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渲染)发生了什么?相关推荐
- 从浏览器输入URL到最终看到页面, 这其中经历了哪些过程 ?
从网络原理来看 1. URL解析 2. 构造http请求 3. 构造完http请求就需要将数据传给传输层了 4. 网络层 5. 数据链路层 6.物理层 7. 路由器 8. 到达服务器的物理层 9. 解 ...
- 从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识
前言 上一章我们说到了数据包在网线中的故事,说到了双绞线,还说到了麻花.这一章继续沿着这条线路往下走,说一些和cdn以及路由器相关,运营商以及光纤相关的小知识,前端同学应该了解一下的 目录 前言 1. ...
- 【网络】浏览器输入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 ...
- 每天一道面试题 浏览器输入URL到页面呈现详细过程
浏览器输入URL到页面呈现过程 1.当用户敲下回车的那一刻,浏览器会判断用户输入的是ip地址还是域名 2.如果是ip地址就直接访问,否则就会先解析域名 3.域名的解析会先从浏览器缓存中去查询,是否有之 ...
- 在浏览器中输入URL按下回车键后发生了什么
在浏览器中输入URL按下回车键后发生了什么 [1]解析URL [2]DNS查询,解析域名,将域名解析为IP地址 [3]ARP广播,根据IP地址来解析MAC地址 [4]分别从应用层到传输层.网络层和数据 ...
- HTTP浏览器输入URL后发生了什么
原文:"天龙八步"细说浏览器输入URL后发生了什么 慕课大神 本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应 ...
- Oppo面经:浏览器输入URL都发生了什么?
1.讲一下Java的虚拟机 2.说说怎么能让虚拟机中的方法区直接爆满 3.讲一下Java的垃圾回收机制 4.把Java中的容器类都讲一下 5.Java中的锁是怎么实现的? 6.引用计数法有啥缺点呢 7 ...
- 在浏览器输入url回车之后发生了什么?
在浏览器输入url回车之后发生了什么? 浏览器解析URL(https://www.baidu.com/dist/test.html),获得协议(https).web服务器名(baidu.com)和文件 ...
- 浏览器输入url后发生了什么?
浏览器输入url后发生了什么? 转载于:https://www.cnblogs.com/hellogiser/p/what-happened-after-url-was-typed-in-browse ...
最新文章
- ios button.imageview 和setimage的区别
- Uva673 平衡的括号
- MySQL第1天:整体目录
- web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...
- Echarts组件 tooltip提示formatter函数
- zipkin 自定义采样率_分组,采样和批处理– Java 8中的自定义收集器
- java sql server连接字符串_关于Java:SQL Server的等效jdbc连接字符串
- 别光啃书了,这才是最前沿的机器学习(ML)技术路线!
- MyEclipse2014配置Git
- MySQL 5.7.27 MGR 单主/多主+ ProxySQL
- 在 Mac OS X 安装gcc编辑环境,make不能用时参考
- JS回调函数、真实举例
- 10个谷歌浏览器调试技巧
- 【回波损耗(dB)和电压驻波比(VSWR)之间的关系】
- ddqn玩flappybird
- 论文阅读(10) 基于吸力的推进是动物高效游泳的基础(2015)
- 影视剪辑高清视频素材怎么找?附全网视频下载工具使用教程方法
- python3个引号啥意思_Python中单引号,双引号,3个单引号及3个双引号的区别
- 免费获取百度网盘会员一天或七天的不限速网盘会员
- 微信红包算个毛 ——微信红包,仅仅是个游戏?!
热门文章
- SHA256 的C语言实现
- php 万分之一几率,那万分之一的概率啊……
- 邀请合作如何表达_适时表达想法 才有利于彼此的合作
- python迭代器举例_如何最简单、通俗地理解Python的迭代器?
- js br不生效_前端标注工具-AILabel.js
- tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题
- winform mysql 工具类_C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装
- 分析启动耗时 android,Android app启动耗时分析
- 【LeetCode笔记】剑指 Offer 57- II. 和为 s 的连续正数序列(Java、滑动窗口、二刷)
- jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收