跳到主要内容

一次网页访问到底发生了什么

很多人第一次搭站时,脑子里的模型只有一句话:“用户访问网址,然后网站打开。”

这个模型太粗了。你只要开始碰域名、DNS、HTTPS、CDN、反向代理、缓存,就会发现很多问题都必须回到整条链路里理解。

先看最小版本

当用户在浏览器里输入一个网址时,大致会发生这些事:

  1. 浏览器解析 URL,知道要访问哪个域名、哪个协议、哪个路径
  2. 浏览器查 DNS,把域名解析成 IP 或代理层地址
  3. 浏览器和目标建立连接,必要时完成 TLS 握手
  4. 浏览器发出 HTTP 请求
  5. 请求可能先经过 CDN、WAF、反向代理,再到你的源站
  6. 源站返回 HTML、CSS、JavaScript、图片、接口数据等内容
  7. 浏览器继续请求依赖资源,最后把页面渲染出来

为什么这件事对建站很重要

因为你后面会遇到的大多数问题,都对应这条链路上的某一层:

  • 域名打不开:通常在 DNS 层
  • 证书报错:通常在 TLS / HTTPS 层
  • 页面慢:可能在源站、CDN、缓存、图片、脚本任一层
  • 资源 404:可能在构建产物、路径、反向代理、对象存储
  • 访问有时成功有时失败:可能在 DNS 刷新、缓存、源站稳定性

按层拆开看

1. URL 和协议

https://docs.example.com/guide/start?lang=zh 这样的地址至少包含:

  • 协议:https
  • 域名:docs.example.com
  • 路径:/guide/start
  • 查询参数:lang=zh

协议告诉浏览器该怎么建立连接,路径告诉服务器要哪个资源。

2. DNS 解析

浏览器不能直接拿域名通信,它要先知道目标是谁。

所以它会查 DNS,把域名解析到:

  • 某个服务器 IP
  • 某个 CDN / 托管平台给你的接入地址

你在域名服务商那里配置的 AAAAACNAME、Nameserver,本质上都是在回答“这个域名最终应该去哪”。

3. 建立连接

如果是 HTTPS,请求在真正传输前还要先做 TLS 握手。

这一步会决定:

  • 证书是否可信
  • 域名是否匹配
  • 连接是否加密

4. HTTP 请求进入边缘层或源站

现在浏览器真正开始发请求了。

但请求不一定直接到你服务器,它可能先经过:

  • CDN
  • WAF
  • 反向代理
  • 托管平台的边缘节点

这就是为什么“我服务器没问题,为什么用户还是访问异常”经常不是服务器单点问题。

5. 源站返回内容

源站可能是:

  • 静态托管平台
  • 对象存储
  • Nginx 静态目录
  • 一个 Node / Python / Java 应用

源站返回的不只是 HTML,也可能是:

  • CSS、JavaScript、图片
  • 接口数据
  • 重定向
  • 错误页

6. 浏览器继续拉依赖资源并渲染

浏览器拿到 HTML 后,还会继续请求:

  • 样式表
  • 脚本
  • 字体
  • 图片
  • 接口数据

所以用户看到的“打开一个网页”,实际上往往对应几十甚至上百个请求。

一个最常见的真实链路

浏览器

DNS

Cloudflare / CDN

Nginx / 托管平台

静态文件或应用服务

这也是为什么建站时你要同时懂:

  • 域名
  • DNS
  • HTTPS
  • CDN
  • 源站
  • 缓存

初学者最容易混淆的几件事

1. 域名不是服务器

域名只是一个名字,真正提供内容的是它后面解析到的服务。

2. 网站打开不代表只发了一次请求

首页通常只是第一份 HTML,后面还有 CSS、JS、图片和接口。

3. Cloudflare 不是你的服务器

它可能在你前面做代理和缓存,但你的源站仍然要能正确返回内容。

4. 页面慢不一定是“网速慢”

可能是 DNS 慢、TLS 慢、源站慢、资源太大、缓存没命中、脚本太重。

你现在至少要记住什么

如果你只先记住一件事,就记住:

用户看到的网页,是一条从域名解析、连接建立、请求转发、源站响应到浏览器渲染的完整链路结果。

以后遇到任何建站问题,都先问自己:它出在哪一层。

适合接着读什么