我们在浏览器用户界面的地址栏中,输入我们需要访问网站地址url后回车。
浏览器工作流程:
-
构建请求:浏览器开启网络请求线程,向服务器发送完整的http请求。
-
查找缓存:真正发起网络请求之前,浏览器会先在数据存储中查询是否有需要请求的文件。如果没有任何缓存,说明第一次请求,则进入网络请求过程。当浏览器有缓存的时候,会拦截请求,返回缓存,拦截请求。缓存优点:缓解服务器压力,提升性能,实现快速加载资源。
-
准备IP地址和端口:通过 URL 地址获取 ip 地址和端口信息,通过 DNS 解析返回域名对应的 ip 和 port ,浏览器也提供了 dns 数据缓存,通常 url 没有指明端口号,则默认80。
-
等待TCP队列:chrome 有个机制,同一域名下同时最多只能建立6个TCP连接,如果同时有10个请求发生,其中4个就会进入等待队列,直至进行中的请求完成,如果小于6个,则直接进入TCP 连接。
-
建立TCP连接:浏览器与服务器之间通过 TCP 建立连接。TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
-
发送http请求:连接建立成功之后,浏览器就可以与服务器之间通讯了。浏览器会向服务器发送请求信息,包括请求方法、请求 URL、http 版本协议。
-
服务器处理请求:服务端收到请求信息以后,会根据浏览器的请求信息返回结果,返回结果中包含三部分:响应行、响应头、响应体。响应行内包含状态码,告诉浏览器处理结果,http状态码有很多。响应头包含服务器自身的一些信息,响应体就包含了网页的 html 实际内容。
-
服务器响应和断开连接:通常服务器向浏览器返回请求数据之后,就会关闭连接,经过四次分手之后,就断开连接了。
浏览器中http请求阶段如图:
http请求和响应处理,是前端与后端数据交互的时候经常使用的部分。
三、浏览器渲染过程
渲染引擎通过网络获得请求文档内容(以8k分块的方式完成),然后开始:解析html为DOM树 > 渲染树结构 > 布局渲染 > 绘制渲染树。
具体解析过程为:
开始解析 html 内容,将标签转化为 DOM 节点,然后解析它外部的css文件以及 style 中的样式信息。css 样式信息和 html 标签来构建渲染树。渲染树是由一些包含颜色大小等盒子组成的,按照从上到下,从左到右的方式显示,渲染树构建好之后,执行布局过程,将每个节点确定在屏幕上的确切坐标,最后使用 UI 后端层绘制每个节点。
举例说明下浏览去解析 html、css、js 的过程:
-
浏览去地址栏输入地址后回车,假设第一次访问,浏览去向服务器发送请求,返回html文件。
-
浏览去载入html代码,解析head中的link引入的外部css文件。
-
浏览器发出css文件请求,服务器会返回css文件。
-
浏览器继续载入body部分代码,css文件接收到之后,就可以渲染页面。
-
遇到img标签引入图片,会立马向服务器发送请求,此时不等待返回的图片,而是继续向下渲染。
-
浏览器接收到返回图片文件,由于图片占用一定面积,影响后边排版,所以浏览去需要回过头重新渲染这部分代码。
-
浏览器发现script标签,内部包含的js代码,就会立即执行。
-
js脚本执行js语句,如果js语句操作的是DOM元素,浏览器就需要重新渲染这部分代码。
-
等到到来,页面第一次渲染就完成了。
-
如果用户点击"换肤"按钮,js让浏览器换一个css文件,此时浏览去又会向服务器发送请求。
-
等浏览器返回新的css文件之后,重新渲染页面。
需要注意:
- js不能并行下载和解析(阻塞下载)。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
https://bbs.csdn.net/topics/618191877)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!