前端页面访问url完整过程解析

embedded/2024/11/14 15:24:52/

前端页面访问URL的完整过程是一个复杂但有序的流程,它涉及到多个层面的技术和协议。以下是该过程的详细讲解:

1. 用户输入URL并按下回车

  • 当用户在浏览器的地址栏中输入一个URL并按下回车时,浏览器开始处理这个请求。

2. 浏览器查找缓存

  • 浏览器缓存:首先,浏览器会检查自身缓存中是否有该URL的DNS解析结果或页面内容。如果有且未过期,则直接使用缓存中的数据,跳过后续步骤。
  • 系统缓存和路由缓存:如果浏览器缓存中没有找到,浏览器会进一步检查操作系统缓存和路由器缓存。

3. DNS解析

  • 如果缓存中没有找到对应的IP地址,浏览器将进行DNS解析,将域名转换为IP地址。
    • 浏览器缓存:首先搜索浏览器自身的DNS缓存。
    • hosts文件和系统缓存:如果浏览器缓存中没有,则搜索hosts文件和操作系统的DNS缓存。
    • 域名解析服务器:如果仍未找到,浏览器会向配置的DNS服务器发送解析请求。DNS服务器可能递归或迭代地查询根域服务器、顶级域服务器等,直到找到对应的IP地址。

4. 建立TCP连接

  • 获取到IP地址后,浏览器会选择一个本地端口(通常大于1024),向目标IP地址的80端口(HTTP协议)或443端口(HTTPS协议)发起TCP连接请求。
  • TCP连接通过三次握手建立:
    1. 客户端(浏览器)发送一个带有SYN标志的数据包给服务器,请求建立连接。
    2. 服务器收到请求后,回复一个带有SYN/ACK标志的数据包,确认收到客户端的请求。
    3. 客户端收到服务器的确认后,再发送一个带有ACK标志的数据包,表示连接建立成功。

5. 发送HTTP请求

  • TCP连接建立后,浏览器会根据HTTP协议构建HTTP请求报文,并通过TCP连接发送给服务器。
  • HTTP请求报文包括请求行、请求报头和请求正文(如果有的话)。请求行包含请求方法(如GET、POST)、请求URL和HTTP协议版本。请求报头包含请求的附加信息和客户端自身的信息。

6. 服务器处理请求并返回响应

  • 服务器收到HTTP请求后,会根据请求的内容进行处理。
  • 处理完成后,服务器会构建一个HTTP响应报文,并通过TCP连接发送给浏览器。
  • HTTP响应报文包括状态行、响应头部和响应数据。状态行包含状态码和HTTP协议版本,状态码用于指示请求的成功或失败。

7. 浏览器解析渲染页面

浏览器解析渲染页面的过程是一个复杂而精细的任务,它涉及到多个步骤和组件的协同工作。以下是该过程的详细介绍:

7.1 浏览器的主要构成

在深入解析渲染过程之前,先简要了解浏览器的几个关键组成部分:

  • 用户界面(User Interface):包括地址栏、后退/前进按钮、书签目录等,是用户与浏览器交互的主要界面。
  • 浏览器引擎(Browser Engine):用来查询及操作渲染引擎的接口。
  • 渲染引擎(Rendering Engine):负责显示请求的内容,如解析HTML和CSS,并将解析后的结果显示出来。
  • 网络(Networking):完成网络调用,如HTTP请求。
  • JS解释器(JS Interpreter):解释执行JavaScript代码。
  • UI后端(UI Backend):绘制基本组件,如组合选择框和对话框。
  • 数据存储(DB Persistence):在硬盘中保存各种数据,如cookies。
7.2 浏览器渲染页面的步骤
7.2.1. 接收和解析HTML
  • 当浏览器接收到HTML文件时,它首先会进行解析。解析过程包括将HTML字节转换为字符,然后根据HTML规范将字符转换为不同的标记(tokens),这些标记再被转换为对象(nodes),最终构建成DOM树(Document Object Model)。
7.2.2. 加载和解析CSS
  • 与HTML解析并行进行的是CSS的加载和解析。浏览器会加载外部CSS文件或内部样式,并解析它们以构建CSSOM(CSS Object Model)树。CSSOM树表示了文档中所有元素的样式信息。
7.2.3. 构建渲染树(Render Tree)
  • 一旦DOM树和CSSOM树都构建完成,浏览器就会将这两个树合并成一个渲染树。渲染树只包含需要显示的节点和它们的样式信息。不可见的元素(如display: none的元素)不会被包含在渲染树中。
7.2.4. 布局(Layout/Reflow)
  • 布局阶段,浏览器会根据渲染树中的信息计算每个元素的几何属性,如位置和大小。这个过程涉及到复杂的算法,以确保页面上的元素能够按照CSS规则正确地排列。
7.2.5. 绘制(Paint)
  • 在绘制阶段,浏览器会遍历渲染树,并使用图形库将每个节点的内容绘制到屏幕上。这个过程将渲染树中的节点转换为屏幕上的像素。
7.2.6. 复合(Compositing)
  • 现代浏览器还会进行复合操作,以优化渲染性能。复合是将页面上的多个图层合并成一个图层的过程。浏览器会将渲染树分成多个图层,并在需要时只重绘和重新复合发生变化的图层,而不是整个页面。
7.3、优化渲染性能

为了提高渲染性能,浏览器和开发者可以采取多种优化措施,如:

  • 减少重绘和重排:通过避免不必要的样式更改和DOM操作来减少重绘和重排的次数。
  • 使用CSS3硬件加速:利用GPU来加速某些渲染操作。
  • 优化图片和字体:使用适当的图片格式和字体格式,以减少文件大小和加载时间。
  • 利用缓存:缓存CSS、JavaScript和图片等资源,以减少重复加载的次数。
  • 异步加载资源:使用asyncdefer属性来异步加载JavaScript文件,以避免阻塞DOM的解析和渲染。

总之,浏览器解析渲染页面的过程是一个复杂而精细的任务,它涉及到多个步骤和组件的协同工作。通过了解这个过程并采取适当的优化措施,我们可以提高网页的加载速度和渲染性能,从而提升用户体验。

8. 关闭TCP连接

  • 如果HTTP请求头中未指定Connection: keep-alive,则浏览器和服务器在完成数据传输后会通过四次挥手关闭TCP连接。
    1. 浏览器发送一个带有FIN标志的数据包给服务器,表示想要关闭连接。
    2. 服务器收到FIN包后,回复一个ACK包确认收到。
    3. 服务器也发送一个FIN包给浏览器,表示自己也想要关闭连接。
    4. 浏览器收到服务器的FIN包后,回复一个ACK包确认收到,并关闭TCP连接。

以上就是前端页面访问URL的完整过程。这个过程涉及到DNS解析、TCP连接、HTTP请求与响应、页面渲染等多个环节,需要多个层面的技术和协议支持。


http://www.ppmy.cn/embedded/114584.html

相关文章

基于MTL的多任务视频推荐系统

多任务学习,也就是MTL(Multi-task Learning),现在已经被用在很多领域了,比如处理自然语言、搞计算机视觉,还有语音识别这些领域。MTL在大规模的推荐系统里也玩得挺溜,尤其是那些做视频推荐的大家伙。 MTL的玩法就是&a…

vue3 自定义el-tree树形结构样式

这里样式设置主要用到了 windcss 实现效果 模拟数据 这里也可以用模拟的数据,下面用的是后端请求的真实数据 [{"id": 5,"rule_id": 0,"status": 1,"create_time": "2019-08-11 13:36:09","update_time": "…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/

科技与艺术完美融合的LED异形创意圆形(饼/盘)显示屏横空出世

随着LED技术的飞速发展,这款集科技与艺术于一体的异形创意圆形(饼/盘)显示屏,不仅以其独特的形态打破了传统显示屏的界限,更在视觉呈现上开启了前所未有的新篇章。它不再仅仅是信息传递的载体,而是成为了空…

ceph简介

ceph存储简要概述: 通过将文件分解成固定大小对象,然后存放于pool中,每个pool中 可包含多个pg,每个pg中又可包含多个osd 通过crush算法 最终数据落盘到osd中去。 一、ceph 删除osd 步骤1 修改osd数据操作权重值 ceph osd crush r…

关于实时数仓的几点技术分享

一、实时数仓建设背景 业务需求的变化:随着互联网和移动互联网的快速发展,企业的业务需求变得越来越复杂和多样化,对数据处理的速度和质量要求也越来越高。传统的T1数据处理模式已经无法满足企业的需求,实时数据处理成为了一种必…

计算机人工智能前沿进展-大语言模型方向-2024-09-20

计算机人工智能前沿进展-大语言模型方向-2024-09-20 1. Multimodal Fusion with LLMs for Engagement Prediction in Natural Conversation Authors: Cheng Charles Ma, Kevin Hyekang Joo, Alexandria K. Vail, Sunreeta Bhattacharya, Alvaro Fern’andez Garc’ia, Kailan…