从输入URL到页面展示到底发生了什么?--01
在浏览器中输入一个URL并按下回车键后,会发生一系列复杂且有条不紊的步骤,从请求服务器到最终页面展示在你的屏幕上。这个过程可以分为以下几个关键步骤:
- URL 解析
- DNS 查询
- TCP 连接
- 发送 HTTP 请求
- 服务器处理请求
- 接收 HTTP 响应
- 浏览器渲染页面
1. URL 解析(示例)
URL(Uniform Resource Locator)是一种统一资源定位符,它包含了访问资源所需的所有信息。一个典型的URL格式如下:
http://www.example.com:80/path/to/resource?query=param#fragment
解析过程中,浏览器会将URL拆分为多个部分:
- 协议(Scheme):如
http
或https
。 - 主机(Host):如
www.example.com
。 - 端口(Port):默认为80(HTTP)或443(HTTPS),如果没有显式指定,浏览器会使用默认端口。
- 路径(Path):服务器上的资源路径。
- 查询参数(Query Parameters):以
?
开头的参数部分。 - 片段标识符(Fragment Identifier):以
#
开头的部分,指向页面内的某个位置。
2. DNS 查询
浏览器需要将URL中的主机名转换为IP地址,这个过程通过DNS(Domain Name System)来完成。DNS 查询的步骤包括:
- 浏览器首先检查本地缓存中是否有该域名的IP地址。
- 如果没有,浏览器会向本地DNS服务器发送查询请求。
- 本地DNS服务器会递归查询其他DNS服务器,直到找到对应的IP地址并返回给浏览器。
3. TCP 连接
得到了IP地址后,浏览器需要与服务器建立连接。这个过程使用TCP(Transmission Control Protocol)完成。TCP连接的过程包括三次握手:
- 客户端发送SYN(同步)包:请求建立连接。
- 服务器返回SYN-ACK(同步-确认)包:同意建立连接。
- 客户端发送ACK(确认)包:确认连接建立。
4. 发送 HTTP 请求
TCP连接建立后,浏览器会发送一个HTTP请求。一个典型的HTTP请求包括以下部分:
- 请求行(Request Line):包含请求方法(如GET或POST)、请求的URL路径和HTTP版本。
- 请求头(Headers):包含客户端信息、期望的响应格式等。
- 请求体(Body):POST请求时可能包含提交的数据。
5. 服务器处理请求
服务器接收到HTTP请求后,会进行处理:
- 解析请求:服务器解析请求行和请求头,提取所需信息。
- 路由请求:根据请求路径和方法,将请求路由到对应的处理程序。
- 生成响应:处理程序处理请求后生成HTTP响应,包括响应行、响应头和响应体。
6. 接收 HTTP 响应
浏览器接收到服务器的HTTP响应后,会进行解析:
- 解析响应行:确定HTTP状态码(如200表示成功,404表示资源未找到)。
- 解析响应头:提取响应的元数据,如内容类型、内容长度等。
- 解析响应体:获取实际的数据内容(如HTML、CSS、JavaScript)。
7. 浏览器渲染页面
浏览器解析并渲染HTML内容的过程包括以下步骤:
- 构建DOM树:解析HTML文档并构建DOM(文档对象模型)树。
- 构建CSSOM树:解析CSS文件并构建CSSOM(CSS对象模型)树。
- 执行JavaScript:如果HTML中包含JavaScript文件,浏览器会下载并执行它们。
- 构建渲染树:将DOM树和CSSOM树结合,构建渲染树。
- 布局和绘制:根据渲染树进行布局计算,将元素的位置和大小确定后进行绘制,将页面内容显示在屏幕上。
这篇博客可以作为面试八股,拱大家使用
从输入URL到页面展示到底发生了什么?--01的更多相关文章
- 【原】老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...
- 【转】老生常谈-从输入url到页面展示到底发生了什么
今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...
- (转)老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索"从输入url到页面展示到底发生了什么",你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么 ...
- 转载--从输入URL到页面展示到底发生了什么
最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...
- 从输入url到页面展示到底发生了什么
阅读目录 1.输入地址 2.浏览器查找域名的 IP 地址 3.浏览器向 web 服务器发送一个 HTTP 请求 4.服务器的永久重定向响应 5.浏览器跟踪重定向地址 6.服务器处理请求 7.服务器返回 ...
- 从输入 URL 到页面展示到底发生了什么?
1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...
- 老生常谈-从输入url到页面展示到底发生了什么
来自:咸鱼老弟 - 博客园 链接:http://www.cnblogs.com/xianyulaodi/p/6547807.html
- 从输入url到页面返回到底发生了什么
1. 前言 Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究竟是怎么样的.毕竟自己也算是一名Web开 ...
- 从输入 URL 到页面展示,到底发生了什么
从输入 URL 到页面展示,到底发生了什么 1.输入URL 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应 ...
- 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?
“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...
随机推荐
- Maven工程报错org.codehaus.plexus.component.repository.exception.ComponentLookupException
本人电脑环境:jdk1.8,idea2021,maven 3.6.3 问题:今天调整maven项目的三个配置参数后,idea报了下面的错误 org.codehaus.plexus.component. ...
- tar解压报错——Not found in archive tar: Exiting with failure status due to previous errors
tar解压报错--Not found in archive [root@master software]# tar -xzf scala-2.11.8.tgz /usr/local/ tar: /us ...
- docker——容器的基本操作
docker 容器的基本操作 run 格式 docker run [选项] 镜像 [命令] [参数...] 选项 选项 解释 -d 后台运行 -i 交互模式 -t 分配一个伪终端 -p 设置端口 -- ...
- .NET 中使用 OpenTelemetry Traces 追踪应用程序
上一次我们讲了 OpenTelemetry Logs.今天继续来说说 OpenTelemetry Traces. 在今天的微服务和云原生环境中,理解和监控系统的行为变得越来越重要.在当下我们实现一个功 ...
- 分布式定理--CAP定理
cap定理指的是,在一个分布式系统中,只能满足cap中的两项. C consistency 一致性 A availability 可用性 P partition tolerance 分区可容错性 -- ...
- centos7 添加极点五笔
打开终端,输入: yum install ibus ibus-table-wubi 遇到"Is this OK",输入y回车. 完成后重启电脑. 打开"应用程序" ...
- TiDB 多集群告警监控-中章-融合多集群 Grafana
author:longzhuquan 背景 随着公司XC改造步伐的前进,越来越多的业务选择 TiDB,由于各个业务之间需要物理隔离,避免不了的 TiDB 集群数量越来越多.虽然每套 TiDB 集群均有 ...
- 知名火锅连锁企业,IT 团队如何在数千家门店中先于用户发现故障
该知名火锅连锁企业是中国领先的餐饮企业,上千家门店遍布全球,由于门店餐饮行业的特殊性,需要靠前部署服务,所以在每家餐厅中,会部署相应的服务器,及相应 IT 设备,本地会运行POS.会员.下单等业务.公 ...
- leetcode_2-两数相加_javascript
题目 2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...
- 三月二十四日 安卓app打卡开发日志
目前打卡系统基本完成 没有实现的功能有无法统计次数 和 连接本地数据库 我全程连接的远程数据库 package com.example.test_four.utils; import java.sql ...