一、这个技术是什么?
当用户访问 https://example.com/articles 时,浏览器要先回答几个问题:
- 要访问什么地址?
- 这个域名对应哪台主机?
- 如何和目标主机建立可靠连接?
- 请求和响应应该使用什么格式?
URL、DNS、TCP 和 HTTP 分别负责这些问题。它们不是同一个东西,而是一次访问中逐层协作的不同环节。
二、没有它之前发生了什么?
如果没有分层协议,应用程序需要自己处理地址、机器定位、可靠传输和消息格式:
应用自己处理所有网络细节
↓
不同程序无法统一通信
↓
网络定位、数据传输和业务语义混在一起
↓
URL、DNS、TCP、HTTP 分工协作
分层之后,HTTP 不需要自己实现每一个字节的可靠传输,浏览器也不需要记住每台服务器的 IP 地址。
三、核心概念
1. URL
URL 是资源地址的完整表达,通常包括协议、主机、端口、路径、查询参数和片段。
2. DNS
DNS 把人容易记忆的域名解析成网络可以定位的 IP 地址。它解决的是“目标在哪里”。
3. TCP
TCP 提供可靠、有序的字节流。它不理解 HTTP 的状态码和路径,只负责传输字节。
4. HTTP
HTTP 规定请求和响应的语义,例如 Method、Status Code、Header 和 Body。
5. TLS
HTTPS 会在 HTTP 外增加 TLS,用于加密通信和验证服务端身份。
四、运行流程
五、面试复习
一句话回答
浏览器先解析 URL,通过 DNS 找到 IP,再通过 TCP 建立连接,之后在连接上发送 HTTP 请求并接收响应。
高频追问
- DNS 解决什么问题?
- TCP 是否理解 HTTP?
- URL 中的
#fragment会不会发送给服务器? - HTTPS 比 HTTP 多了什么?
容易答错
不要说“DNS 把 URL 转成 IP”。DNS 主要处理域名,URL 还包含协议、端口、路径和其他信息。
六、项目展示
在项目排查中,可以用浏览器 Network 面板观察:请求 URL、DNS 时间、连接时间、TLS 时间、服务器响应时间和下载时间,从而判断性能瓶颈位于哪一层。