HTTP/HTTPS 协议详解

HTTP/HTTPS 协议详解

星苒鸭 Lv4

每次你在浏览器地址栏输入一个网址,按下回车,短短几百毫秒内,一个完整的网页就呈现在你眼前。但你有没有想过,这背后发生了什么?今天我们就来深入了解一下 Web 世界的基础——HTTP 和 HTTPS 协议。

HTTP 请求响应流程

HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 世界的基础语言。当你在浏览器访问一个网站时,大致会经历这样的流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端                      服务器
| |
|-------- 1. 请求 -------->|
| GET /index.html |
| |
|<------- 2. 响应 ---------|
| 200 OK + HTML内容 |
| |
|-------- 3. 请求 -------->|
| GET /style.css |
| |
|<------- 4. 响应 ---------|
| 200 OK + CSS内容 |

一个简单的 HTTP 请求示例:

1
2
3
4
5
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Connection: keep-alive

对应的响应:

1
2
3
4
5
6
7
8
9
10
11
12
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Date: Mon, 01 Jan 2026 00:00:00 GMT

<!DOCTYPE html>
<html>
<head><title>欢迎</title></head>
<body>
<h1>Hello, World!</h1>
</body>
</html>

请求方法

HTTP 定义了多种请求方法,最常用的是这几个:

GET - 获取资源

1
2
3
4
5
# 获取页面内容
GET /index.html HTTP/1.1

# 带参数的请求
GET /search?q=hello&page=1 HTTP/1.1

GET 请求的特点:

  • 参数在 URL 中可见
  • 可以被缓存
  • 可以被收藏为书签
  • 不应该用于修改服务器数据

POST - 提交数据

1
2
3
4
5
6
7
8
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json

{
"username": "admin",
"password": "secret"
}

POST 请求的特点:

  • 数据在请求体中
  • 不会被缓存
  • 常用于表单提交、API 调用
  • 可以提交大量数据

其他方法

方法 描述 示例
PUT 更新资源 更新用户资料
PATCH 部分更新 修改文章标题
DELETE 删除资源 删除一条评论
HEAD 获取响应头 检查资源是否存在
OPTIONS 查询支持的方法 CORS 预检请求

状态码详解

每次 HTTP 响应都会带有一个状态码,告诉你请求的结果。

2xx - 成功

状态码 含义 说明
200 OK 请求成功 最常见的成功状态
201 Created 已创建 POST 请求成功创建资源
204 No Content 无内容 成功但无返回内容

3xx - 重定向

状态码 含义 说明
301 Moved Permanently 永久重定向 资源已永久移动到新 URL
302 Found 临时重定向 资源临时移动
304 Not Modified 未修改 资源未改变,可使用缓存

4xx - 客户端错误

状态码 含义 说明
400 Bad Request 请求错误 请求格式有问题
401 Unauthorized 未授权 需要登录
403 Forbidden 禁止访问 登录了但权限不够
404 Not Found 未找到 最常见!资源不存在
429 Too Many Requests 请求过多 被限流了

5xx - 服务器错误

状态码 含义 说明
500 Internal Server Error 服务器内部错误 服务器出 bug 了
502 Bad Gateway 网关错误 上游服务器无响应
503 Service Unavailable 服务不可用 服务器过载或维护中
504 Gateway Timeout 网关超时 上游服务器响应太慢

小技巧:看到 4xx 错误,先检查自己的请求是否有问题;看到 5xx 错误,那基本是服务器的问题,只能等管理员修复了哈哈哈哈。

HTTPS 与 SSL/TLS 原理

HTTP 是明文传输的,这意味着数据在传输过程中可能被窃听、篡改。HTTPS(HTTP Secure)通过 SSL/TLS 加密解决了这个问题。

HTTPS 的工作原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
客户端                              服务器
| |
|-------- 1. ClientHello -------->|
| (支持的加密方法) |
| |
|<------- 2. ServerHello ---------|
| (选择的加密方法 + 证书) |
| |
|-------- 3. 验证证书 ------------->|
| (检查证书是否可信) |
| |
|<------- 4. 密钥交换 -------------|
| (协商会话密钥) |
| |
|======== 5. 加密通信 =============>|
| (使用会话密钥加密数据) |

SSL/TLS 握手过程简化版

  1. 客户端告诉服务器自己支持的加密套件
  2. 服务器选择一个加密套件,并发送数字证书
  3. 客户端验证证书(由 CA 签名,包含公钥)
  4. 客户端生成随机密钥,用服务器公钥加密发送
  5. 服务器用私钥解密得到随机密钥
  6. 双方使用这个密钥进行对称加密通信

证书申请与配置

申请免费 SSL 证书(Let’s Encrypt + Certbot)

1
2
3
4
5
6
7
8
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 申请证书(自动配置 Nginx)
sudo certbot --nginx -d example.com -d www.example.com

# 只申请证书(手动配置)
sudo certbot certonly --nginx -d example.com

Nginx 配置 HTTPS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
listen 443 ssl http2;
server_name example.com;

# SSL 证书路径
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# SSL 协议和加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# SSL 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

location / {
root /var/www/html;
index index.html;
}
}

# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}

证书自动续签

Let’s Encrypt 的证书有效期为 90 天,需要定期续签。Certbot 会自动创建一个定时任务,你也可以手动测试:

1
2
3
4
5
# 测试续签(不实际续签)
sudo certbot renew --dry-run

# 手动续签
sudo certbot renew

HTTP/2 和 HTTP/3 介绍

HTTP/2

HTTP/2 在 2015 年发布,主要改进:

  • 多路复用:一个 TCP 连接可以并发传输多个请求
  • 头部压缩:减少传输的数据量
  • 服务器推送:服务器可以主动推送资源
  • 二进制协议:更高效的数据传输

在 Nginx 中启用 HTTP/2:

1
2
3
4
server {
listen 443 ssl http2; # 添加 http2 即可
# ... 其他配置
}

HTTP/3(QUIC)

HTTP/3 是最新的版本,基于 QUIC 协议(基于 UDP):

  • 解决队头阻塞:HTTP/2 在 TCP 层面仍有队头阻塞问题
  • 更快的连接建立:0-RTT 连接建立
  • 更好的网络切换:移动设备网络切换更流畅
1
2
3
4
5
6
# Nginx 支持 HTTP/3 需要额外配置
server {
listen 443 quic;
listen 443 ssl http2;
# ... 其他配置
}

总结

HTTP/HTTPS 是 Web 开发的基础,理解它们能让你:

  1. 更好地调试:知道状态码的含义,快速定位问题
  2. 优化性能:理解缓存、连接复用等机制
  3. 保障安全:知道 HTTPS 的重要性,正确配置证书
  4. 选择合适协议:了解 HTTP/2 和 HTTP/3 的优势

关键知识点回顾:

  • HTTP 方法:GET 获取数据,POST 提交数据,PUT 更新,DELETE 删除
  • 状态码:2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务器错误
  • HTTPS:通过 SSL/TLS 加密,保护数据安全
  • HTTP/2/3:不断演进,追求更快的速度

掌握了这些,你对 Web 通信的理解就上了一个新台阶。接下来可以深入了解:

  • HTTP 缓存机制
  • CORS 跨域问题
  • WebSocket 实时通信
  • HTTP 压缩和优化技巧

记住,HTTP 就像快递系统,你下单(请求),商家发货(响应),快递员送到。理解了这个流程,Web 开发的很多问题就迎刃而解了!

  • 标题: HTTP/HTTPS 协议详解
  • 作者: 星苒鸭
  • 创建于 : 2026-02-02 14:00:00
  • 更新于 : 2026-03-05 19:20:55
  • 链接: https://xingranya.cn/http-https-protocol-guide/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论