域名解析原理与网络接入
12.3 域名结构
Tip
URL (Uniform Resource Locator) 是我们在浏览器地址栏里输入的那一串东西。它看起来很长,但结构非常严谨。
1. 为什么要学这个?
用户问:“这个 https 是什么意思?”
“为什么有些网址有 www,有些没有?”
“那个 :3000 是必须输的吗?”
如果你答不上来,你的专业度就打折了。你需要像解剖师一样,理解每一个字符背后的含义。
2. 核心概念:URL 的解剖学
一个标准的 URL 包含 5 个部分:
https://www.google.com:443/search?q=hello
- Protocol (协议):
https://。告诉浏览器用什么语言和服务器沟通。 - Subdomain (子域名):
www。 - Domain (主域名):
google.com。 - Port (端口):
:443。通常省略 (HTTP默认80,HTTPS默认443)。 - Path (路径):
/search。你要访问服务器的哪个文件或路由。 - Query (参数):
?q=hello。给服务器传的变量。
3. 解决方案 (HOW)
3.1 常用记录类型 (DNS Records)
在配置域名时,你会遇到以下名词:
- A 记录 (Address): 域名 -> IP (IPv4)。
example.com->1.2.3.4
- CNAME (Alias): 域名 -> 另一个域名 (别名)。
blog.example.com->cname.vercel-dns.com(常用)
- MX (Mail): 邮件服务,决定了谁来收这个域名的邮件。
- TXT: 文本记录。常用于验证域名所有权 (Google/Vercel 验证)。
3.2 结构示意图
graph TD
URL["完整 URL"] --> Proto["协议 (https)"]
URL --> Host["主机名 (Host)"]
URL --> Path["路径 (/api/users)"]
Host --> Sub["子域名 (www)"]
Host --> Root["主域名 (example.com)"]
style Host fill:#e1bee7,stroke:#8e24aa
style Proto fill:#c8e6c9,stroke:#2e7d32
4. 避坑指南
| ❌ 不要这样做 | ✅ 应该这样做 | 为什么 |
|---|---|---|
| 只解析 www | 同时也解析 @ | 很多用户习惯直接输 example.com。如果你忘了解析根域名 (@),这部分用户就打不开网站。 |
| 根域名用 CNAME | 根域名用 A 或 AAAA | 标准协议规定根域名不能有 CNAME。虽然 Cloudflare 有 CNAME Flattening 黑科技,但为了稳妥,尽量遵循标准。 |
| 泛解析 (*) | 明确指定子域名 | 开启 *.example.com 虽然方便,但容易被恶意利用,或者导致 SSL 证书配置复杂化。 |
5. 真实案例
Story
2018年,丢失的 Cookie
某开发者把登录 Cookie 设置在 app.example.com 下。用户访问 www.example.com 时发现没登录,投诉 Bug。
原因:Cookie 默认是有域名作用域的。子域名之间的 Cookie 默认不共享。
Vibe 心法:域名不仅是入口,也是浏览器的安全边界。深刻理解 URL 的每一层级及其背后的 DNS 记录类型,是为了在跨子域名共享状态(如 SSO 登录)时,能够精准控制 Cookie 的作用域。
6. 本章小结
- URL:是通往资源的地图。
- CNAME:是目前云服务(Vercel/AWS)最常用的接入方式。
- WWW:其实也是一个子域名,和
blog、mail地位一样,只是约定俗成的“大门”。