从 URL 到页面:浏览器加载过程的详细解析
当你在浏览器中输入一个 URL 并按下回车键,直到页面内容显示在屏幕上,这个过程中发生了许多步骤。以下是一个详细的分解,解释从输入 URL 到看到内容之间的整个过程:

1. 用户输入 URL
用户在浏览器地址栏中输入 URL(例如 https://www.example.com)并按下回车键。
2. 浏览器解析 URL
浏览器解析输入的 URL,提取出协议(https)、域名(www.example.com)、路径(如果有的话)和查询参数(如果有的话)。
3. 检查缓存
浏览器首先检查本地缓存中是否有该域名的 IP 地址。如果有,直接使用缓存的 IP 地址。如果没有,继续下一步。
4. DNS 解析
- 浏览器缓存:浏览器检查其缓存中是否有该域名的 IP 地址。
- 操作系统缓存:如果浏览器缓存中没有,浏览器会向操作系统查询。
- 本地 DNS 服务器:如果操作系统缓存中没有,操作系统会向配置的本地 DNS 服务器发送查询请求。
- 递归查询:本地 DNS 服务器会递归查询其他 DNS 服务器,直到找到该域名对应的 IP 地址。
- 返回结果:DNS 服务器将结果返回给操作系统,再由操作系统返回给浏览器。
5. 建立连接
5.1 TCP 连接
- 三次握手:
- SYN:客户端发送一个 SYN(同步)包到服务器,表示请求建立连接。
- SYN-ACK:服务器收到 SYN 包后,回复一个 SYN-ACK(同步-确认)包,表示同意建立连接。
- ACK:客户端收到 SYN-ACK 包后,回复一个 ACK(确认)包,连接建立。
5.2 TLS/SSL 握手(如果是 HTTPS)
- 客户端问候:客户端发送一个 ClientHello 消息,包含支持的加密算法、TLS 版本等信息。
- 服务器问候:服务器回复一个 ServerHello 消息,选择加密算法和 TLS 版本,并发送服务器证书。
- 证书验证:客户端验证服务器证书的有效性。
- 密钥交换:客户端生成一个随机数,用服务器的公钥加密后发送给服务器,服务器用私钥解密,生成会话密钥。
- 完成握手:双方使用会话密钥加密通信,握手完成。
6. 发送 HTTP 请求
- 构建请求:浏览器构建一个 HTTP 请求,包括请求行(如
GET / HTTP/1.1)、请求头(如Host: www.example.com)和可选的请求体(如 POST 请求的数据)。 - 发送请求:浏览器通过建立的 TCP 连接将 HTTP 请求发送到服务器。
7. 服务器处理请求
- 接收请求:服务器接收到 HTTP 请求。
- 请求解析:服务器解析请求行、请求头和请求体。
- 路由处理:服务器根据请求的路径和参数,确定处理请求的逻辑。
- 业务逻辑:服务器执行相应的业务逻辑,可能涉及读取文件、查询数据库、调用其他服务等。
- 生成响应:服务器生成一个 HTTP 响应,包括状态行(如
HTTP/1.1 200 OK)、响应头(如Content-Type: text/html)和响应体(如 HTML 内容)。
8. 浏览器接收响应
- 接收响应:浏览器接收到服务器的 HTTP 响应。
- 解析响应:浏览器解析响应头和响应体。
9. 渲染页面
9.1 解析 HTML
- 构建 DOM 树:浏览器解析 HTML 文档,构建 DOM 树(Document Object Model)。
- 处理脚本:如果遇到
<script>标签,浏览器会暂停解析,执行脚本。脚本可能会修改 DOM 树。
9.2 解析 CSS
- 构建 CSSOM 树:浏览器解析 CSS 文件和内联样式,构建 CSSOM 树(CSS Object Model)。
9.3 解析 JavaScript
- 执行脚本:浏览器解析和执行 JavaScript 代码。JavaScript 代码可能会修改 DOM 树和 CSSOM 树。
9.4 构建渲染树
- 结合 DOM 和 CSSOM:浏览器将 DOM 树和 CSSOM 树结合,构建渲染树。
9.5 布局(Layout)
- 计算布局:浏览器计算每个元素的大小和位置。
9.6 绘制(Painting)
- 绘制元素:浏览器将元素绘制到屏幕上。
10. 处理资源请求
- 发现资源:在解析 HTML 的过程中,浏览器会发现需要加载的资源(如图片、CSS 文件、JavaScript 文件等)。
- 发送请求:浏览器会并行发送请求,加载这些资源。
- 重复解析和渲染:浏览器重复上述的解析和渲染过程,直到所有资源加载完成。
11. 用户交互
- 用户操作:页面加载完成后,用户可以与页面进行交互(如点击按钮、输入表单等)。
- 事件处理:浏览器会根据用户的操作,触发相应的事件处理程序,更新页面内容。
结论
从用户在浏览器中输入 URL 到页面内容显示在屏幕上,涉及 DNS 解析、建立连接、发送请求、服务器处理、接收响应、解析和渲染页面等多个步骤。每个步骤都可能涉及多个子步骤和复杂的处理逻辑。通过深入理解这些过程,我们可以更好地优化网站性能,提高用户体验。希望这篇详细的解析能帮助你更好地理解浏览器的工作原理。
原文链接:
从 URL 到页面:浏览器加载过程的详细解析的更多相关文章
- 输入 URL 到页面完成加载过程中的所有发生的事情?
转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: ...
- android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器. 如果手机 ...
- Tomcat8源码笔记(三)Catalina加载过程
之前介绍过 Catalina加载过程是Bootstrap的load调用的 Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...
- 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)
先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 l ...
- 浏览器加载显示html页面内容的顺序
我们经常看到浏览器在加载某个页面时,部分内容先显示出来,又有些内容后显示.那么浏览器加载显示html究竟是按什么顺序进行的呢 其实浏览器加载显示html的顺序是按下面的顺序进行的:1.IE下载的顺序是 ...
- 浏览器加载、渲染html的顺序和页面优化
浏览器加载和渲染html的顺序 1. IE下载的顺序是从上到下,渲染(就是把请求的内容显示到浏览器屏幕上)的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分 ...
- webclient 比浏览器加载页面慢的一个问题
测试中发现webclient 比浏览器加载页面慢的一个问题:原因WebClient 支持 gzip, deflate,但是未设置 解决方案: class WebClientEx : WebClient ...
- css3实现loading效果--当页面加载过程中显示Loading的进度条,全部加载完成之后进度条消失
一个页面等图片资源全部加载完成,会需要很长时间,用户体验会很差,所以我们需要loading来掩盖这个漫长的过程! emmm,定时器?写个定时器还要清除,万一造成内存泄露?定时器之间还会互相影响,呼呼呼 ...
- 关于asp.net中页面事件加载的先后顺序
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
- js模拟浏览器加载效果 pace.js 中文官方文档
2017年2月20日12:11:25 官网URL:http://github.hubspot.com/pace/docs/welcome/ 文档 http://github.hubspot.com/p ...
随机推荐
- cpp零碎知识点小记
字符串读取方法记录 记录 个人小结: 按整行读到string ,推荐用 方法2 getline(cin, string) 按整行读到char[] ,推荐用 方法4 cin.getline(cin, c ...
- 「Log」2023.9.26 小记
序幕 \(\text{6:40}\):到校,整大量博客. 今天有模拟赛,发题的时候就我一个人,差点以为自己要 rk1 了. \(\text{7:30}\):开题. 发现 T1 做过,简单缩点+树直径速 ...
- 使用Logback实现不同微服务输出各自的日志文件
找到logback-spring.xml配置文件,在里面使用如下配置 <!--定义策略日志文件的存储地址--><property name="logStrategy.pat ...
- C# 与低代码平台的融合:以活字格为例的 Web API 开发实践
引言 在当今软件开发领域,低代码平台凭借其高效.便捷的特性逐渐成为开发的主流趋势.而 C# 作为一种功能强大的编程语言,在服务端开发中有着广泛的应用.将 C# 与低代码平台相结合,能够充分发挥两者的优 ...
- 故障处理:2分钟处理Oracle RAC中OCR磁盘组丢失磁盘的故障
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...
- kubernetes源码解析
下载并且编译 git clone https://github.com/kubernetes/kubernetes.git cd kubernetes make cd _output 查看编译产物
- 如何用三层防护体系打造坚不可摧的 API 安全堡垒?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ FastAPI 安全与认证综合实 ...
- C# WInFomr 窗体圆角
#region 设置窗体圆角 /// <summary> /// 设置窗体圆角 /// </summary> /// <param name="f"& ...
- nginx反向代理,负载均衡和yeauty集成的websocket的使用
被要求一个这样的需求:要求项目和websocket使用一个端口.经过一周激烈争论,领导终于同意可以可以开通一个端口,一个月了,端口还没有开. 正式环境已经通过此方法进行部署,没有问题. 前言 因涉及到 ...
- windows镜像esd转iso
背景 经常在三方网站(比如:修系统.不忘初心系统)下载到精简系统,但是这些系统的格式不仅仅是iso,还有可能是esd. 虽然两者几乎等价,但是有些平台 比如虚拟机.mac转换助理不能识别esd格式的镜 ...