当前位置: 首页 > news >正文

从输入URL到页面呈现都发生了什么?

完整步骤:

1. 输入 URL & 浏览器解析 URL

  • 用户在地址栏输入 https://www.example.com:8080/path/to/page?name=ferret&color=purple#section1
  • 浏览器拆分出协议、域名、路径等部分
 协议      主机名(域名)   端口
┌─┴──┐ ┌───────┴──────┐ ┌─┴─┐
https://www.example.com:8080/path/to/page?name=ferret&color=purple#section1└┬┘ └──┬──┘ └┬┘     └──────┬─────┘ └───────────┬─────────┘└───┬───┘子域名 二级域名 顶级域名       路径         查询字符串(参数)      片段标识符

2. 浏览器强缓存检查(是否已有缓存的资源可用)

  • 如果 Cache-Control: max-age 或 Expires 仍有效 → 直接使用本地缓存 → ✅ 渲染页面,流程结束

3. DNS 缓存查询(有没有域名对应的 IP 地址)

1. 浏览器 DNS 缓存
2. 操作系统 DNS 缓存(包括 hosts 文件)
3. 本地 DNS 解析器缓存(Stub Resolver 缓存)
4. 本地 DNS 服务器缓存(通常由 ISP 提供)
5. 根域名服务器(Root DNS)
6. 顶级域名服务器(TLD DNS,如 .com)
7. 权威域名服务器(Authoritative DNS)

如果命中缓存 → 跳过 DNS 查询阶段,直接得到 IP。

4. 若缓存未命中 → DNS 查询

  • 递归 or 迭代方式向 DNS 服务器查询域名对应的 IP 地址
  • 得到 IP 地址后返回

5. 建立 TCP 连接(三次握手)

  • 客户端发送 SYN
  • 服务器返回 SYN + ACK
  • 客户端再发 ACK → 连接建立

6. 如果是 HTTPS,还需 TLS 握手(生成加密会话)

  • 交换证书、公钥验证、协商对称密钥等

7. 发起 HTTP 请求(包括协商缓存)

  • 请求带有:If-Modified-Since、ETag 等头部
  • 服务器判断资源是否变更,返回:
    • 304 Not Modified(协商缓存命中)→ 用缓存
    • 200 OK(资源已变更)→ 返回新内容

8. 浏览器接收响应并渲染页面

  • 构建 DOM 树
  • 下载 & 解析 CSS(构建 CSSOM)
  • 下载 & 执行 JS
  • 构建渲染树 → 布局 → 绘制 → 合成 → 呈现页面

9. TCP 四次挥手断开连接(或保持连接)

  • 如果是短连接 → 执行四次挥手断开
  • 如果是长连接(keep-alive)/ HTTP/2 → 保持连接以便复用
http://www.dtcms.com/a/279815.html

相关文章:

  • MFC UI大小改变与自适应
  • wpf 实现窗口点击关闭按钮时 ​​隐藏​​ 而不是真正关闭,并且只有当 ​​父窗口关闭时才真正退出​​ 、父子窗口顺序控制与资源安全释放​
  • AI 优化大前端动画性能:流畅性与资源消耗的平衡
  • Django REST framework 源码剖析-URL地址详解(Returning URLs)
  • 亚马逊广告进阶玩法:如何巧妙利用ASIN广告优化产品排名
  • Java面试总结(经典题)(Java多线程)(一)
  • 数据结构——优先队列(priority_queue)的巧妙运用
  • 排序树与无序树:数据结构中的有序性探秘
  • K8s存储系统(通俗易懂版)
  • 约束|additional
  • 如何更改Blender插件安装位置呢?
  • 【Vue】Vue3.6 - Vapor 无虚拟DOM
  • 算法:投票法
  • 硬盘爆满不够用?这个免费神器帮你找回50GB硬盘空间
  • SpringBoot 整合 MyBatis-Plus
  • 多线程是如何保证数据一致和MESI缓存一致性协议
  • 深入浅出Kafka Broker源码解析(下篇):副本机制与控制器
  • Open3D 点云DBSCAN密度聚类
  • 鹧鸪云重构光伏发电量预测的精度标准
  • JS解密大麦网分析
  • 06【C++ 初阶】类和对象(上篇) --- 初步理解/使用类
  • 创客匠人谈创始人 IP 打造:打破自我认知,方能筑牢 IP 变现根基
  • linux下的消息队列数据收发
  • python学智能算法(十七)|SVM基础概念-向量的值和方向
  • 计算实在论:一个关于存在、认知与时间的统一理论
  • win7+Qt1.12.3+opencv4.3+mingw32+CMake3.15编译libopencv_world430.dll过程
  • 【Python】-实用技巧5- 如何使用Python处理文件和目录
  • Java并发编程之事务管理详解
  • Redis集群方案——Redis分片集群
  • GPU集群运维