浏览器访问背后的秘密:从加载到关闭,数据是否会丢失?

⏩ 一次浏览器访问 www.xxx.com 背后发生了什么?
—— 以及“我点了 ×,数据会不会丢?”的深度剖析

适读人群:Web 开发者、运维工程师、性能调优/安全从业者


1️⃣ 打开浏览器敲下网址:链路是如何启动的?

阶段关键词关键细节
解析阶段DNS、缓存浏览器先查本地/系统 DNS 缓存 → hosts → 浏览器 DNS 缓存 → 递归查询(可能走 DoH/DoT)。拿到 A / AAAA 记录。
连接阶段TCP 3‑way、TLS 1.3TCP:SYN → SYN‑ACK → ACK;若启用 QUIC/HTTP‑3 则直接 UDP 把 3 次握手+TLS 合并。
TLS:ClientHello→ServerHello→ … → Finished,现代浏览器基本启用 0‑RTT/1‑RTT。
请求阶段HTTP/2、HPACK、首部压缩浏览器构造 GET /,附带头(UA、Cookie、Accept‑Encoding…),优先用 HTTP/2 多路复用并发流。
服务器内部负载均衡、反向代理、应用层可能经历 ELB/Nginx/Sidecar,再到业务容器;中间会有 队列、限流、熔断
响应阶段TCP 流/ QUIC 流服务器写回状态行+头+Body;浏览器解析 HTML 发现静态资源→并发下载→渲染。
结束阶段FIN、连接复用HTTP/1.1的长连接或 H2/H3 的流会保持空闲等待复用;超时或浏览器关闭时发送 FIN

2️⃣ “我等得太慢点了 ×,服务器会怎么想?”

2.1 浏览器侧:取消动作

  • 显式取消:用户点击“停止加载”或关闭 Tab。
    浏览器对活跃的 TCP/QUIC 流发送 RST(或 HTTP/2 RST_STREAM)。
  • 隐式取消:超时时间到、页面卸载等;浏览器会 abort fetch,内核可能直接 close() 套接字。

2.2 网络层:信号传递

协议取消信号服务器感知
TCPRST立即终止连接;内核返回 ECONNRESET,应用读/写触发异常。
HTTP/2RST_STREAM (error‑code=0)仅关闭对应流,复用的其他流不受影响;h2 服务器收到回调。
QUIC/HTTP‑3STOP_SENDING / RESET_STREAM与 h2 类似,但基于 UDP;更快释放流。

2.3 服务器侧:请求已经“进厨房”怎么办?

  1. 刚到负载均衡

    • 连接被复用,RST 直接丢弃,Nginx 可能还没把请求转给应用,成本小。
  2. 已进应用但未执行业务

    • 线程/协程池检测到 socket 断开会抛 IOException;大多数框架(Spring MVC、Express、Gin…)会捕获记录 ClientAbortException 后结束。
  3. 业务正在执行

    • CPU 正烧:图片压缩、大 SQL、RPC…
    • 同步模型:直到代码写响应时才发现对端关闭 → 计算白做了,但数据未写出,资源浪费
    • 异步/事件模型:中途可检测 connectionAborted flag 主动中止。
  4. 下游已持久化

    • 例如下单接口:一旦写入数据库/消息队列,就算用户取消,也已成功。
    • 于是就有了 支付回调、“查看订单”按钮来补偿交互的不确定性。

3️⃣ “数据丢不丢?”—— 三个不同层次的回答

角度是否丢失?解释
传输层✅ 丢浏览器取消后,剩余报文不再发送;未到达的响应也不再接收。
应用层❌ 不一定服务器可能已完整处理,持久化成功。仅“用户没看到”而已。
业务语义需要幂等好的接口要做到 幂等&可重试:PUT/DELETE 设计有幂等键,POST 返回可查询的 operationId

4️⃣ 工程实践:让“取消”更友好

  1. 前端

    • AbortController 取消 fetch;
    • 超时反馈:Skeleton Screen / 旋转骨架;
    • 使用 web‑worker + keep‑alive 提升体验。
  2. 网关/反代

    • 配置 proxy_request_buffering off (Nginx) 让大上传即时回源;
    • 针对 client_abort 及时丢弃后端响应。
  3. 后端

    • 设计 可中断任务:定期检查 Thread.currentThread().isInterrupted()
    • 重型计算放入 作业队列,前端轮询 jobId
    • 数据库写操作加 事务/唯一约束 保证幂等。
  4. 监控

    • 关注 499 Client Closed Request(Nginx)、444 No Response
    • 链路追踪标记 aborted=true,评估浪费。

5️⃣ 小结

  • 用户取消请求后,网络传输层面数据一定中断
  • 服务器逻辑可能仍在继续,甚至已成功写库;
  • 工程上通过 幂等、作业分离、连接检测 将“浪费”降到最低;
  • 让前端与后端都能 优雅应对取消,才是真正的端到端体验优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HDFS入门】深入解析DistCp:Hadoop分布式拷贝工具的原理与实践

目录 1 DistCp概述与应用场景 2 DistCp架构设计解析 2.1 系统架构图 2.2 执行流程图 3 DistCp核心技术原理 3.1 并行拷贝机制 3.2 断点续传实现原理 4 DistCp实战指南 4.1 常用命令示例 4.2 性能优化策略 5 异常处理与监控 5.1 常见错误处理流程 5.2 监控指标建议…

hbuilderx云打包生成的ipa文件如何上架

使用hbuilderx打包,会遇到一个问题。开发的ios应用,需要上架到app store,因此,就需要APP store的签名证书,并且还需要一个像xcode那样的工具来上架app store。 我们这篇文章说明下,如何在windows电脑&…

第十五届蓝桥杯 2024 C/C++组 拼正方形

目录 题目: 题目描述: 题目链接: 思路: 思路详解: 易错点: 代码: 代码详解: 题目: 题目描述: 题目链接: P10898 [蓝桥杯 2024 省 C] 拼正…

华为云获取IAM用户Token的方式及适用分析

🧠 一、为什么要获取 IAM 用户 Token? 我们用一个生活中的比喻来解释👇: 🏢 比喻场景: 你要去一个 高级写字楼(华为云物联网平台) 办事(调用接口管理设备)&…

乐聚机器人与地瓜机器人达成战略合作,联合发布Aelos Embodied具身智能

要闻 4月19日,在CCF人形机器人与人工智能技术巡回研讨会(武汉站)上,乐聚机器人与地瓜机器人达成战略合作,双方将基于RDK X5、RDK S100以及更高性能的国产大算力平台,就夸父(KUAVO)、…

Web3架构下的数据隐私与保护

在这个信息爆炸的时代,Web3的概念如同一股清流,以其去中心化的特性,为数据隐私与保护带来了新的希望。Web3,也被称作下一代互联网,它通过区块链技术实现数据的去中心化存储和处理,旨在提高数据的安全性和隐…

【OceanBase相关】02-OceanBase数据库NFS备份实践

文章目录 一、前言1、概述2、备份方式3、备份流程4、恢复流程二、NFS备份1、注意事项2、服务端配置3、客户端配置4、备份策略配置三、常用操作四、Q&A1、数据备份任务执行失败,提示`start log archive backup when not STOP is not supported`1.1、问题说明1.2、解决措施2…

一行命令打开iOS模拟器

要在 Mac 命令行打开 iPhone 15 Pro 模拟器,需满足已安装 Xcode 这一前提条件,以下是具体操作步骤: 步骤一:列出所有可用模拟器设备 打开终端(Terminal),输入并执行以下命令,用于列…

Java虚拟机(JVM)家族发展史及版本对比

Java虚拟机(JVM)家族发展史及版本对比 一、JVM家族发展史 1. 早期阶段(1996-2000) Classic VM(Java 1.0-1.1): 厂商:Sun Microsystems(Oracle前身)。特点&…

嘻游电玩三端客户端部署实战:PC + Android + iOS 环境全覆盖教程

本篇文章将针对“网狐系列嘻游电玩组件”的三端客户端(PC端、安卓端、iOS端)进行详细部署实操讲解。文章将以实测部署为核心,提供资源结构说明、平台适配调整、打包配置、常见问题修复,并辅以必要的关键配置代码。 一、客户端资源…

LabVIEW实现Voronoi图绘制功能

该 LabVIEW 虚拟仪器(VI)借助 MathScript 节点,实现基于手机信号塔位置计算 Voronoi 图的功能。通过操作演示,能直观展示 Voronoi 图在空间划分上的应用。 各部分功能详细说明 随机地形创建部分 功能:根据 “Maximum a…

web刷题笔记

2024isctf ezrce 禁用了一些关键字符,查询函数,系统执行函数,执行函数都有,空格也和斜杆也禁用了,但是其他一些很大一部分字符都没有禁用,属于关键词禁用的类型,正常的步骤是去查一下列表&#…

集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解

本篇将全面解构“水浒传”子游戏的服务端核心逻辑、帧同步机制、鱼群刷新规则、客户端命中表现与服务器计算之间的协同方式,聚焦于 C 与 Unity3D 跨端同步的真实实现过程。 一、水浒传捕鱼模块资源结构 该模块包含三部分核心目录: 子游戏/game_shuihuz…

【产品经理从0到1】原型及Axure介绍

原型分类 原型的三种分类: 草图原型:⼿绘稿,制作⽅便,修改不⽅便;低保真原型:简单交互,⽆设计图; 最好的原型是⿊⽩灰的;⾼保真原型:复杂交互,有…

CVE-2024-23897-Jenkins 2.441之前版本存在任意文件读取漏洞

1.漏洞介绍 Jenkins 2.441及更早版本,以及LTS 2.426.2及更早版本没有禁用其CLI命令解析器的一个功能,该功能会将参数中字符后跟的文件路径替换为该文件的内容,允许未经身份验证的攻击者读取Jenkins控制器文件系统上的任意文件。 2.poc利用 下…

PostgreSQL性能调优与内核优化怎么做?

PostgreSQL 的高级性能调优和内核优化是PGCM认证的核心能力之一,也是企业级数据库场景中解决性能瓶颈的关键手段。以下是直白易懂的实战解析: 一、性能调优:让数据库“跑得更快” 1. 执行计划优化 问题场景:一个复杂查询耗时10秒…

DeepSeek是否采用了混合专家(MoE)架构?它如何提升模型效率?

引言 最近,关于DeepSeek是否采用混合专家(Mixture of Experts,MoE)架构的讨论越来越多。MoE技术因其高效的计算特性,已经成为大模型训练的热门选择。那么,DeepSeek到底有没有用MoE?如果用了&am…

HTTP 请求头与请求体:数据存储的底层逻辑与实践指南

文章目录 一、数据承载的本质差异1.1、请求头:元数据的 "集装箱"1.2、请求体:业务数据的 "运输舱"二、请求方式的选择逻辑2.1、GET 请求:无体的轻量级交互2.2、POST 请求:体数据的主力军2.3、PUT/PATCH 请求:体数据的更新场景三、参数属性的深度解析3…

【网工第6版】第5章 网络互联②

目录 ■ IPV6 ▲ IPV6报文格式 ◎ IPV6扩展报头(RFC2460) ◎ IPv6相关协议 ▲ IPV6地址分类 ◎ IPv6地址基础 ◎ IPv6地址举例 ◎ IPv6地址分类 ◎ 特殊地址对比IPv4 vs IPv6 ▲ 过渡技术 本章重要程度:☆☆☆☆☆ ■ IPV6 与IPv4…

关于 梯度下降算法、线性回归模型、梯度下降训练线性回归、线性回归的其他训练算法 以及 回归模型分类 的详细说明

以下是关于 梯度下降算法、线性回归模型、梯度下降训练线性回归、线性回归的其他训练算法 以及 回归模型分类 的详细说明: 1. 梯度下降算法详解 核心概念 梯度下降是一种 优化算法,用于寻找函数的最小值。其核心思想是沿着函数梯度的反方向逐步迭代&a…