HTTP 协议全解析:从输入网址到页面渲染的全过程(附请求/响应详解)
本文带你从浏览器地址栏开始,一步步拆解网络通信全过程,理解 HTTP 协议、TCP/IP 协议族、请求与响应报文格式,以及 Express、AJAX 等相关后续内容的基础。
一、HTTP 协议与网络基础
1. 网络通信的本质
互联网通信的核心是 “请求(Request)” 与 “响应(Response)” 。
浏览器(客户端)向服务器发送请求,服务器接收后返回响应数据。
整个过程遵循 HTTP 协议 规范。
2. URL 的组成
以示例地址为例:
https://lilichao.com/hello/index.html
| 组成部分 | 含义 |
|---|---|
https:// | 协议名(如 HTTP、HTTPS、FTP 等) |
lilichao.com | 域名(Domain) |
/hello/index.html | 资源路径(Path) |
域名与 IP 地址:
- 每台服务器都有唯一的 IP 地址(如
192.168.1.17)。 - IP 不易记忆,因此使用域名作为别名。
- 浏览器在访问网站前,会将域名解析成对应的 IP 地址(DNS 解析)。
二、浏览器输入网址后发生了什么?
当你输入 https://lilichao.com/hello/index.html 并回车,浏览器会依次执行以下步骤:
1️⃣ DNS 解析:将域名转换为 IP 地址
2️⃣ 建立连接:浏览器与服务器通过 TCP 协议进行三次握手
3️⃣ 发送请求:浏览器按照 HTTP 协议格式发送请求报文
4️⃣ 服务器处理请求:并生成响应报文返回
5️⃣ 浏览器渲染页面:解析 HTML、CSS、JS 渲染出页面
6️⃣ 断开连接:四次挥手关闭 TCP 连接
三、TCP 三次握手 & 四次挥手
三次握手(建立连接)
| 步骤 | 说明 | 报文标志 |
|---|---|---|
| 1 | 客户端 → 服务器:请求建立连接 | SYN |
| 2 | 服务器 → 客户端:同意连接 | SYN + ACK |
| 3 | 客户端 → 服务器:确认连接建立 | ACK |
四次挥手(断开连接)
| 步骤 | 说明 | 报文标志 |
|---|---|---|
| 1 | 客户端 → 服务器:请求断开连接 | FIN |
| 2 | 服务器 → 客户端:收到请求 | ACK |
| 3 | 服务器 → 客户端:准备断开 | FIN + ACK |
| 4 | 客户端 → 服务器:确认断开 | ACK |
四、TCP/IP 协议族(了解)
TCP/IP 协议族是一组规定了互联网通信细节的协议。整个通信过程可分为四层:
| 层级 | 功能说明 |
|---|---|
| 应用层 | 软件层(如浏览器、服务器、HTTP 协议) |
| 传输层 | 负责数据分段、可靠传输(如 TCP) |
| 网络层 | 负责给数据包添加路由信息(如 IP 协议) |
| 数据链路层 | 负责实际的数据传输 |
HTTP 协议属于 应用层,主要用于定义请求和响应的格式。
五、HTTP 报文结构详解
HTTP 报文(message)是客户端与服务器通信的数据单位,分为:
- 请求报文(Request)
- 响应报文(Response)
📨 请求报文结构
请求首行
请求头
空行
请求体
1. 请求首行
GET /index.html?username=sunwukong HTTP/1.1
| 部分 | 含义 |
|---|---|
GET | 请求方法(常见:GET、POST) |
/index.html?username=sunwukong | 请求路径与查询参数 |
HTTP/1.1 | 协议版本 |
查询字符串
- 格式:
key=value&key2=value2 - 示例:
username=admin&password=123123 - GET 请求:数据在 URL 中传输,安全性较差、长度有限。
- POST 请求:数据在请求体中传输,安全性更高、无大小限制。
2. 请求头(Headers)
请求头以键值对形式传递信息:
Accept: text/html
Accept-Encoding: gzip, deflate, br
User-Agent: Mozilla/5.0
| 常见字段 | 含义 |
|---|---|
Accept | 可接受的文件类型 |
Accept-Encoding | 支持的压缩方式 |
User-Agent | 浏览器及系统信息 |
3. 请求体(Body)
-
仅 POST、PUT 等请求方式包含
-
在 Chrome → 网络面板中通过「载荷(Payload)」可查看
-
示例:
{ "username": "sunwukong", "password": "123456" }
响应报文结构
响应首行
响应头
空行
响应体
1. 响应首行
HTTP/1.1 200 OK
| 元素 | 说明 |
|---|---|
HTTP/1.1 | 协议版本 |
200 | 状态码 |
OK | 状态描述 |
常见状态码:
| 状态码 | 含义 |
|---|---|
| 1xx | 请求处理中 |
| 2xx | 成功(200 OK) |
| 3xx | 重定向 |
| 4xx | 客户端错误(404、403) |
| 5xx | 服务器错误(500) |
2. 响应头(Headers)
Content-Type: text/html; charset=UTF-8
Content-Length: 2017
| 字段 | 含义 |
|---|---|
Content-Type | 响应内容类型 |
Content-Length | 响应体大小 |
3. 响应体(Body)
就是服务器返回的实际数据,例如:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<form method="post" action="./02_target.html">
<input type="text" name="username" />
<input type="password" name="password" />
<button>提交</button>
</form>
</body>
</html>
六、实际请求示例
请求报文:
GET /index.html?username=sunwukong HTTP/1.1
Host: 127.0.0.1:5500
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Connection: keep-alive
响应报文:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 2017
Connection: keep-alive
Date: Thu, 27 Oct 2022 11:52:29 GMT
七、后续学习方向
Express 框架
用于构建 Node.js Web 服务器,核心模块包括:
-
路由(Router)
-
中间件(Middleware)
- 静态资源
- 请求体解析(body-parser / json)
- Cookie、Session
-
模板引擎(如 EJS)
-
MVC 架构模式
AJAX
浏览器端向服务器发送异步请求的技术,用于:
- 局部刷新页面
- 异步数据交互
- 与后端接口对接
总结
HTTP 协议是前端开发的基石,理解它能帮助我们:
- 掌握浏览器与服务器的通信流程;
- 分析请求与响应,优化性能;
- 理解 Express / AJAX 的底层逻辑;
- 为学习前后端分离与 API 通信打下基础。