一次网络请求的处理流程
当用户打开一个 Web 站点时,浏览器会发起一系列的网络请求,以获取站点的内容。这个过程涉及到多个环节,包括缓存、代理、DNS 解析、TCP 请求、SSL 请求、HTTP 请求等。本文将详细介绍这些环节,并提供一些常见的问题排查方法。
一、网络请求的处理流程
- HTTP 强制缓存
HTTP 强制缓存是浏览器在本地缓存中查找请求资源的过程。如果资源在缓存中存在且未过期,浏览器将直接使用缓存中的资源,而不会向服务器发送请求。这可以显著提高页面加载速度。
- ServiceWorker
ServiceWorker 是一种在浏览器后台运行的脚本,可以拦截和处理网络请求。如果 ServiceWorker 存在且已经注册,它可以在请求到达服务器之前,直接从缓存中返回响应内容。这样可以进一步提高页面加载速度,甚至在离线情况下也能提供内容。
- 设备连接到互联网
如果浏览器无法从缓存或 ServiceWorker 中获取资源,它将尝试连接到互联网。这一步需要确保设备的网络连接正常,否则请求将无法继续。
- 网络代理
在网络请求过程中,用户可能会使用代理工具(如梯子工具、网络加速器等)。如果代理配置错误或连接异常,可能会导致请求失败或响应缓慢。
- 查找 hosts
在进行 DNS 解析之前,浏览器会先检查本地的 hosts 文件。如果 hosts 文件中存在对应的域名和 IP 地址映射,浏览器将直接使用该映射,而不会进行 DNS 解析。
- DNS 解析
如果 hosts 文件中没有对应的映射,浏览器将进行 DNS 解析,以获取域名对应的 IP 地址。DNS 解析的结果可能会影响请求的路由和响应速度。
- 初始化 TCP 请求
在获取到 IP 地址后,浏览器将初始化 TCP 请求,建立与服务器的连接。这一步需要确保网络环境稳定,否则可能会导致连接失败。
- 初始化 SSL
如果请求使用 HTTPS 协议,浏览器将初始化 SSL 握手,以确保数据传输的安全性。这一步需要确保 SSL 证书有效,否则可能会导致请求失败。
- 初始化 HTTP 请求
在建立连接后,浏览器将发送 HTTP 请求,包括请求头和请求体。服务器接收到请求后,将返回相应的响应内容。
- 路由设备处理数据包
在数据传输过程中,路由设备会处理数据包,确保数据能够正确到达目标服务器。如果路由设备不稳定,可能会导致数据包丢失或延迟。
- CDN 缓存
如果服务器使用了 CDN(内容分发网络),请求可能会被路由到离用户最近的 CDN 节点。CDN 缓存可以显著提高响应速度,但如果缓存配置不当,可能会导致内容不一致。
- 服务端响应
最终,服务器将处理请求并返回响应内容。如果服务器端存在问题,可能会导致响应内容不正确或响应速度缓慢。
二、常见问题与排查步骤
1. 没有返回内容
1.1 ServiceWorker 返回结果为空
-
排查方法:
- 使用 Chrome DevTools 检查 HTTP 请求上下文,查看 ServiceWorker 是否正常工作。
1.2 HTTP 强制缓存的内容为空
-
排查方法:
- 使用 Chrome DevTools 检查 HTTP 请求缓存应用状态和响应头,确保缓存配置正确。
1.3 代理配置错误、连接异常
-
排查方法:
-
检查代理工具的配置,确保代理工具的使用场景正确。
-
常见情况包括:不该用代理工具的时候使用了代理工具,或者该用代理工具的时候没有使用。
-
1.4 hosts 配置错误
-
排查方法:
-
使用 Chrome DevTools 检查 HTTP 请求的 Remote Address,确保 hosts 文件中的映射正确。
-
使用
dig
命令验证 DNS 解析结果,例如: -
bash复制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com
-
1.5 DNS 解析结果不正确
-
排查方法:
-
使用 Chrome DevTools 检查 HTTP 请求的 Remote Address,确保 DNS 解析结果正确。
-
使用
dig
命令验证 DNS 解析结果,例如: -
bash复制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com
-
1.6 TCP 层无法通信
-
排查方法:
-
使用 Chrome DevTools 检查请求状态,确保 TCP 连接正常。
-
使用
telnet
命令测试连接,例如: -
bash复制
telnet 58.com 80
-
1.7 SSL 证书过期、与域名不符
-
排查方法:
- 使用 Chrome DevTools 检查 Security 面板,确保 SSL 证书有效。
1.8 HTTP 请求、响应异常
-
排查方法:
- 使用 Chrome DevTools 检查请求状态码、缓存状态和必要的请求响应头,确保请求和响应符合预期。
2.返回内容慢
2.1 没有合理利用 HTTP 强制缓存
-
排查方法:
- 使用 Chrome DevTools 检查 HTTP 请求缓存应用状态和响应头,确保缓存配置正确。
2.2 互联网连接状态异常
-
排查方法:
-
使用
ping
命令验证网络基本连通性,例如: -
bash复制
ping -c 10 58.com
-
确保网络环境满足以下条件:
-
丢包率低于 5%。
-
平均延时低于 20ms。
-
最低、最高延时差值小于 30ms。
-
-
2.3 代理配置错误、连接异常
-
排查方法:
- 检查代理工具的配置,确保代理工具的使用场景正确。
2.4 DNS 解析结果异常
-
排查方法:
-
使用
dig
命令验证 DNS 解析结果,例如: -
bash复制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com
-
2.5 路由设备不稳定
-
排查方法:
-
使用
traceroute
命令验证数据包到达公网之前的路由情况,例如: -
bash复制
traceroute -n 58.com
- 检查 WiFi 状态,确保 Tx Rate 高于 150 Mbps,连接方式为 5Ghz。
-
2.6 没有启用 HTTP/2
-
排查方法:
- 使用 Chrome DevTools 检查 Network 面板中的 Protocol,确保使用了 HTTP/2。
2.7 实时性需求较高的场景使用了 TCP
-
排查方法:
- 考虑使用 UDP 协议,以提高实时性。
2.8 没正确使用 CDN 缓存
-
排查方法:
- 使用 Chrome DevTools 检查请求的参数,确保 CDN 缓存配置正确。
3. 返回内容不对
返回内容不对通常是服务端或 HTTP 网关服务的问题,需要联系后端或运维来解决。
4. 通信内容被监控、劫持、篡改
4.1 DNS 解析记录监控、劫持、篡改
-
防御方法:
-
在 Chrome 中配置使用可靠的 DoT(DNS over TLS)或 DoH(DNS over HTTPS),例如:
-
打开
chrome://settings/security
。 -
选择
Use secure DNS
。 -
选择
With custom
,国内建议填写https://doh.pub/dns-query
。
-
-
在路由器中使用支持 DoT/DoH 且支持 EDNS Client Subnet 的方式,与上游 DNS 通信。
-
在域名提供商处配置 DNSSEC。
-
4.2 中间人攻击(MITM)
-
防御方法:
-
使用 SSL 的站点不一定是安全的,但不使用或没有正确使用 SSL 的站点一定是不安全的。
-
通过客户端锁定站点证书的方式,是最安全的方法。
-
三、总结
网络请求的处理流程涉及多个环节,每个环节都可能影响请求的成功与否。通过合理的配置和排查方法,可以有效解决常见的网络问题,提高用户体验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!