面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)
一、整体流程速览用户输入 URL 并按下回车浏览器解析 URL判断是搜索词还是网址浏览器检查缓存决定是否直接复用缓存未命中 → DNS 解析将域名转为 IP建立 TCP 连接HTTPS 还需 TLS 握手构造 HTTP 请求并发送给服务器服务器处理请求生成响应返回 HTTP 响应给浏览器浏览器根据响应头处理缓存、压缩、重定向解析 HTML构建 DOM 树解析 CSS构建 CSSOM 树DOM CSSOM 合并为渲染树布局计算确定几何位置与尺寸绘制将内容绘制到图层合成线程合成画面显示到屏幕JavaScript 在合适时机执行动态更新页面二、输入 URL地址栏里发生了什么2.1 URL / URI / URN 的区别概念全称含义URLUniform Resource Locator统一资源定位符描述位置URIUniform Resource Identifier统一资源标识符URL 是其子集URNUniform Resource Name统一资源名称只命名不定位完整 URL 结构texthttps://www.example.com:443/path/to/page?nametestpage1#section2部分含义https协议www.example.com主机名域名443端口号HTTPS 默认 443HTTP 默认 80/path/to/page路径nametestpage1查询参数#section2片段标识符页面内定位不发给服务器2.2 地址栏输入处理浏览器判断输入是「网址」还是「搜索关键词」符合 URL 格式 → 尝试访问包含空格或不符合 URL 规则 → 交给搜索引擎localhost或192.168.1.1→ 识别为主机地址只输入example.com无协议头 → 自动补全为http://或https://2.3 HSTS 与 HTTPS 升级如果输入的是http://浏览器可能因以下原因自动升级为 HTTPS该域名曾被记录为 HSTS 站点浏览器启用了 HTTPS Only 模式站点返回过强制安全策略升级时浏览器内部改 URL可能返回 307 Internal Redirect。三、浏览器多进程架构与导航请求3.1 Chrome 的多进程架构进程职责浏览器主进程窗口、地址栏、书签、网络请求协调、文件访问渲染进程解析 HTML/CSS/JS渲染页面每标签页独立GPU 进程图形渲染和合成输出到屏幕网络进程所有网络请求HTTP、HTTPS、DNS、WebSocket插件进程隔离运行第三方插件存储进程本地存储、IndexedDB、Cache Storage音频进程音频播放目的稳定性和安全性。一个页面崩溃不影响其他页面渲染进程在沙箱中运行。3.2 导航请求发起浏览器主进程通过 IPC 把 URL 交给网络进程网络进程负责检查浏览器本地缓存处理代理设置判断是否需要 DNS 解析判断是否需要建立新连接或复用四、浏览器缓存第一道加速关卡4.1 缓存类型类型特点HTTP 缓存根据响应头字段决定是否复用内存缓存读写快但会话结束丢失磁盘缓存读写慢可跨会话保留Service Worker 缓存优先级高于 HTTP 缓存用于 PWA推送缓存HTTP/2 服务器推送场景4.2 强缓存 vs 协商缓存强缓存缓存未过期时浏览器直接用本地缓存不发请求。字段说明Cache-Control: max-age3600有效期 3600 秒Cache-Control: public可被任何对象缓存Cache-Control: private只被浏览器私有缓存Cache-Control: no-store禁止缓存Cache-Control: no-cache可缓存但每次使用前需验证协商缓存强缓存过期后浏览器携带缓存标识向服务器验证。响应头请求头说明ETagIf-None-Match内容哈希值精确到内容Last-ModifiedIf-Modified-Since最后修改时间精确到秒服务器返回304则继续用本地缓存返回200则用新响应。ETag 优先级通常高于 Last-Modified。4.3 缓存命中典型流程检查 Service Worker 缓存策略生成缓存键查 HTTP 强缓存强缓存命中 → 直接返回强缓存未命中/过期 → 带协商缓存标识向服务器验证服务器 304 → 用本地缓存200 → 用新响应并更新缓存五、DNS 解析域名转 IP5.1 域名层级结构textwww.example.com. │ │ │ └── 根域通常省略 │ │ └────── 顶级域名 TLDcom │ └───────────── 二级域名example └───────────────── 三级域名/主机名www5.2 DNS 查询完整过程浏览器向操作系统发起解析先检查 hosts 文件未命中 → 向本地 DNS 服务器发起查询本地 DNS 先查自身缓存未命中 → 向根域名服务器查询返回 .com 服务器地址向 .com 顶级域名服务器查询返回 example.com 权威服务器地址向权威域名服务器查询返回 www.example.com 的 IP本地 DNS 缓存结果并返回给操作系统再返回浏览器关键区分客户端做递归查询把活交给本地 DNS本地 DNS 做迭代查询一级一级往下问。5.3 DNS 记录类型记录含义A域名 → IPv4 地址AAAA域名 → IPv6 地址CNAME域名别名指向另一个域名MX邮件服务器TXT域名验证、SPF、DKIMNS权威 DNS 服务器5.4 CDN 与 DNS 调度权威 DNS 根据请求来源 IP 判断用户所在地区返回最近的 CDN 节点 IP降低延迟、缓解源站压力。5.5 DNS 优化减少域名数量DNS Prefetchlink reldns-prefetch href//example.comCDN 和就近调度各级缓存加速重复查询六、TCP 连接建立三次握手6.1 TCP 报文段关键字段字段作用源/目的端口标识应用进程序列号 seq数据字节编号确认号 ack期望收到的下一个字节序号数据偏移TCP 首部长度控制位SYN、ACK、FIN、RST、PSH、URG窗口大小流量控制校验和校验首部和数据6.2 三次握手流程步骤报文序列号状态第一次SYNseqx客户端 → SYN-SENT第二次SYNACKseqy, ackx1服务端 → SYN-RCVD第三次ACKseqx1, acky1双方 → ESTABLISHED三个阶段证明什么第一次客户端能发第二次服务器能收能发第三次客户端能收为什么是三次不是两次两次握手服务器无法确认客户端是否收到 SYNACK也无法确认客户端会继续参与连接旧 SYN 延迟到达还可能导致服务器错误建立连接。为什么不是四次第三次握手已能确认客户端接收正常四次会多一次不必要往返。6.3 四次挥手步骤报文说明第一次客户端 FIN请求关闭客户端→服务器方向第二次服务器 ACK确认收到关闭请求第三次服务器 FIN服务器→客户端方向也可关闭第四次客户端 ACK客户端进入 TIME_WAIT等 2MSL为什么 ACK 和 FIN 分开服务器收到 FIN 时可能还有数据要发先回 ACK数据发完再发 FIN。为什么等 2MSL保证最后一个 ACK 能到达服务器丢失时可重发让旧连接报文在网络中自然消失避免干扰新连接。6.4 TCP 可靠传输与拥塞控制可靠传输机制确认应答超时重传滑动窗口流量控制拥塞控制拥塞控制四阶段阶段特点慢启动窗口指数增长拥塞避免窗口线性增长快重传3 个重复 ACK 立即重传不等超时快恢复窗口减半继续不回到慢启动七、HTTPS 与 TLS 握手7.1 为什么需要 HTTPSHTTP 明文传输可能被窃听、篡改、伪装。HTTPS 在 HTTP 和 TCP 之间加入 TLS 层提供加密传输防窃听完整性校验防篡改身份认证证书确认服务器身份7.2 TLS 1.2 握手ECDHEClientHello客户端发送支持的 TLS 版本、加密套件、随机数ServerHello服务器选定版本、套件返回随机数Certificate服务器发送数字证书ServerKeyExchange发送密钥交换参数ServerHelloDone阶段结束ClientKeyExchange客户端发送密钥交换参数双方计算会话密钥ChangeCipherSpec Finished双方通知后续加密并校验握手完整性TLS 1.2 通常需要 2-RTT。7.3 TLS 1.3 的改进握手往返从 2-RTT 减少到1-RTT移除过时算法默认使用前向安全算法支持0-RTT 会话恢复前向安全性即使服务器私钥泄露历史会话密钥也无法推导7.4 证书链与身份认证验证步骤检查证书是否由受信任 CA 签发验证证书是否在有效期内验证域名是否匹配递归验证中间证书与根证书信任链任何一步失败浏览器会显示安全提示。八、HTTP 请求与响应8.1 HTTP 报文结构请求报文textGET /path/to/page?nametestpage1 HTTP/1.1 Host: www.example.com Accept: text/html Connection: keep-alive响应报文textHTTP/1.1 200 OK Content-Type: text/html; charsetutf-8 Cache-Control: max-age36008.2 常见请求方法方法语义GET获取资源POST提交数据PUT整体替换PATCH部分更新DELETE删除资源HEAD只获取响应头OPTIONS查询支持的方法跨域预检8.3 常见状态码类别含义示例1xx信息性101 Switching Protocols2xx成功200、201、2043xx重定向301、302、3044xx客户端错误400、401、403、4045xx服务器错误500、502、5038.4 HTTP 版本演进版本关键特性HTTP/1.0每请求独立 TCP 连接HTTP/1.1Keep-Alive、管道化有队头阻塞HTTP/2二进制分帧、多路复用、头部压缩、服务器推送HTTP/3基于 QUICUDP内置可靠传输降低握手延迟九、服务器处理请求9.1 负载均衡与反向代理请求首先到达负载均衡器Nginx、F5、云 LB按轮询、最少连接、一致性哈希等策略转发到后端。反向代理承担 TLS 终结、静态资源缓存、压缩、限流、安全防护。9.2 Web 服务器接收请求静态资源 → 直接读磁盘返回动态请求 → 通过 FastCGI 或反向代理交给应用服务器9.3 后端应用处理链路路由匹配根据 URL 和方法找到控制器中间件鉴权、日志、参数校验、限流业务处理调用服务层数据访问数据库、缓存、下游服务、消息队列结果组装序列化为 JSON、HTML9.4 服务器返回响应状态码 响应头 响应体。可能包含 Content-Type、Cache-Control、Set-Cookie、Content-Encoding、Location。压缩响应经 gzip 或 br 压缩后再返回。十、浏览器渲染流程10.1 构建 DOM 树HTML 边接收边解析字节流 → 字符 → Token → 节点对象 → DOM 树10.2 构建 CSSOM 树遇到 style 标签或外部 CSS 时解析构建 CSSOM。CSS 会阻塞渲染CSSOM 未完成无法确定最终样式但通常不阻塞 DOM 解析。10.3 合成渲染树DOM CSSOM →Render Tree渲染树。只包含可见节点display: none的元素不进入head、style、script不进入10.4 布局Layout / Reflow计算每个可见节点的几何信息位置、大小。从根节点开始按盒模型和文档流规则确定坐标。10.5 绘制Paint / Repaint根据渲染树和样式生成绘制指令把文本、颜色、边框、阴影、背景画到图层。10.6 合成Composite现代浏览器把页面拆分为多个图层合成线程叠加图层生成最终画面提交给 GPU。只有 transform 或 opacity 变化时可能跳过布局和绘制直接进入合成性能更好——这是动画优化推荐用 transform 和 opacity 的原因。十一、JavaScript 执行机制11.1 script 标签会阻塞解析吗默认情况下遇到script会停止解析先下载并执行脚本。属性行为无阻塞解析下载后立即执行defer异步下载HTML 解析完成后按顺序执行async异步下载下载完成后立即执行顺序不保证11.2 事件循环与任务队列JavaScript 是单线程的通过事件循环处理异步任务执行同步代码调用栈清空微任务队列Promise、MutationObserver执行一个宏任务setTimeout、setInterval、I/O回到步骤 211.3 回流与重绘操作触发回流Reflow几何属性变化宽高、位置、字体大小重绘Repaint外观属性变化颜色、背景、阴影合成transform、opacity 变化优化原则尽量用 transform 和 opacity 做动画避免触发回流。十二、总结与答题思路回答这道题时建议按下面的层次组织先给全景图URL 解析 → 缓存 → DNS → TCP → TLS → HTTP 请求 → 服务器处理 → HTTP 响应 → 浏览器渲染 → JS 执行重点展开DNS 递归/迭代查询、TCP 三次握手、TLS 握手、HTTP 缓存策略、浏览器渲染流水线体现深度解释「为什么」如为什么三次握手、为什么 CSS 阻塞渲染、为什么 transform 性能好结合工程CDN、DNS Prefetch、强缓存与协商缓存、defer 与 async、回流重绘优化主动引导如果某个方向更擅长可以主动展开

相关新闻

面试必问:如何保证接口的幂等性?

面试必问:如何保证接口的幂等性?

一、引言:为什么幂等性是面试必考题在互联网系统的后端研发中,有一个概念几乎贯穿了所有核心业务的稳定性设计,那就是接口幂等性。无论是支付、下单、转账、积分发放、消息消费,还是开放平台的对外接口,幂等性都是无法…

2026/10/11 1:46:38 阅读更多 →
插入排序为什么这样写?从腾位置到二分,再到希尔排序

插入排序为什么这样写?从腾位置到二分,再到希尔排序

插入排序为什么这样写?从腾位置到二分,再到希尔排序 如果不先背代码,直接插入排序其实很好想到:先整理好一部分,每拿到一个新数,就给它找个位置,插进去。 但“插进去”在数组里怎么实现&#…

2026/10/11 1:45:38 阅读更多 →
基于微信小程序的旧物回收捐赠平台设计与实现

基于微信小程序的旧物回收捐赠平台设计与实现

温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平…

2026/10/11 1:45:38 阅读更多 →

最新新闻

2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

去年底,我接了一个副业项目——帮一家线下工作室做预约管理后台。需求不算复杂:客户能在线选时间、提交预约,管理员能看到排期并导出。甲方预算有限,我一个人全栈扛下,从后端API到前端页面都得自己写。当时正好想深度体…

2026/10/11 2:45:13 阅读更多 →
链表原理与实战:从数据结构底层逻辑到数组选型对比

链表原理与实战:从数据结构底层逻辑到数组选型对比

1. 数据结构的底层逻辑:为什么每个程序员都绕不开它1.1 你每天都在用数据结构,只是没意识到我最早接触“数据结构”这四个字的时候,觉得它就是个考试科目,背一背概念、画一画图、应付完面试就完事了。直到后来做了几个真正有点规模…

2026/10/11 2:45:13 阅读更多 →
头部AI写作辅助平台星级排名(2026 最新盘点)

头部AI写作辅助平台星级排名(2026 最新盘点)

基于功能完整性、学术适配性、用户使用体验及内容生成质量,本文对当前主流AI论文写作工具进行深度测评,按综合表现力从高到低进行排序,并详细解析各平台的核心优势与适用领域。🏆 第一梯队:全流程学术解决方案&#xf…

2026/10/11 2:45:13 阅读更多 →
WSDL全面拆解:五大核心元素与接口对接排障实战

WSDL全面拆解:五大核心元素与接口对接排障实战

接手别人留下的老系统&#xff0c;打开接口文档&#xff0c;看到一屏幕的XML&#xff0c;各种<wsdl:definitions>、<wsdl:types>、<wsdl:binding>&#xff0c;头瞬间就大了。这恐怕是不少后端开发都经历过的场景。没错&#xff0c;这就是WSDL&#xff08;Web…

2026/10/11 2:45:13 阅读更多 →
OpenCode接入GLM大模型:终端AI编程Agent实战指南

OpenCode接入GLM大模型:终端AI编程Agent实战指南

1. 先搞清楚&#xff1a;OpenCode 和 GLM 是怎么凑到一起的OpenCode 配 GLM 这套玩法&#xff0c;说白了就是在一个开源终端工具里&#xff0c;用 GLM 大模型当编码大脑&#xff0c;让你用自然语言驱动整个开发流程。OpenCode 本身不提供任何模型能力&#xff0c;更像一个调度器…

2026/10/11 2:45:13 阅读更多 →
自建Docker镜像仓库完整指南:从选型到落地的踩坑总结

自建Docker镜像仓库完整指南:从选型到落地的踩坑总结

在容器化落地走到一定规模之后&#xff0c;几乎每个团队都会遇到一个绕不开的基础设施问题&#xff1a;镜像仓库。项目标题就四个字“docker镜像仓库”&#xff0c;但真正动手自建过的人都知道&#xff0c;这四个字背后藏着选型、存储、安全、性能、运维一长串的决策链。这篇就…

2026/10/11 2:44:13 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →