Skip to content

🌍 HTTP 与 HTTPS 协议 ​

上网的本质:浏览器发一个 HTTP 请求,服务器回一个 HTTP 响应

HTTP 是什么 ​

HTTP = HyperText Transfer Protocol,超文本传输协议。基于 TCP,默认端口 80。

客户端(浏览器)                    服务器(nginx)
      │                                   │
      │  GET /index.html HTTP/1.1         │
      │  Host: kb.sirenzhuli.cn           │
      │──────────────────────────────────→│
      │                                   │
      │  HTTP/1.1 200 OK                  │
      │  Content-Type: text/html          │
      │                                   │
      │  <html>...页面内容...</html>       │
      │←──────────────────────────────────│

HTTP 请求方法 ​

方法含义场景
GET获取资源打开网页、查 API
POST提交数据登录、表单提交
PUT替换资源更新整条数据
DELETE删除资源删记录
PATCH部分更新改一个字段
HEAD只要响应头检查资源是否存在
OPTIONS看支持哪些方法CORS 预检

HTTP 状态码 ​

2xx 成功 ​

状态码含义
200 OK请求成功
201 Created创建成功(POST 后)
204 No Content成功但无返回体

3xx 重定向 ​

状态码含义
301 Moved Permanently永久迁移(域名换了)
302 Found临时跳转
304 Not Modified没变化,用缓存

4xx 客户端错误 ​

状态码含义常见原因
400 Bad Request请求格式不对JSON 解析失败
401 Unauthorized没登录Token 过期
403 Forbidden没权限nginx deny
404 Not Found资源不存在URL 写错
405 Method Not Allowed方法不对GET 改 POST 没配
429 Too Many Requests请求太频繁触发了限流

5xx 服务端错误 ​

状态码含义常见原因
500 Internal Server Error服务器内部错误代码崩了
502 Bad Gateway网关错误上游服务挂了
503 Service Unavailable服务不可用正在重启
504 Gateway Timeout网关超时上游处理太久

HTTP 请求头(常用) ​

http
GET /api/users HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (浏览器标识)
Accept: application/json
Authorization: Bearer eyJhbGci...
Content-Type: application/json
Cookie: session_id=abc123

响应头 ​

http
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 256
Cache-Control: max-age=3600
Set-Cookie: session_id=xyz789; HttpOnly; Secure
Access-Control-Allow-Origin: *

HTTPS = HTTP + TLS 加密 ​

对比HTTPHTTPS
端口80443
加密明文(谁抓包谁看光)TLS 加密
证书不需要需要 SSL 证书
SEO搜索引擎不优先优先收录
浏览器显示 ⚠️ 不安全显示 🔒

TLS 握手(简化) ​

客户端                        服务器
  │                              │
  │  ClientHello(支持的加密套件)│
  │─────────────────────────────→│
  │                              │
  │  ServerHello + 证书 + 公钥   │
  │←─────────────────────────────│
  │                              │
  │  验证证书 ✓                  │
  │  生成对称密钥,用公钥加密     │
  │─────────────────────────────→│
  │                              │
  │     开始加密通信              │
  │←════════════════════════════→│

用 curl 测试 HTTP ​

bash
# GET 请求
curl https://kb.sirenzhuli.cn

# 只看响应头
curl -I https://kb.sirenzhuli.cn

# POST JSON 数据
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123"}'

# 带 Authorization
curl -H "Authorization: Bearer <token>" \
  https://api.example.com/users

# 看详细过程(含 TLS 握手)
curl -v https://kb.sirenzhuli.cn

# 忽略证书验证(仅测试用!)
curl -k https://localhost:8443

HTTPS 排故 ​

bash
# 1. 证书是否有效
openssl s_client -connect kb.sirenzhuli.cn:443 -servername kb.sirenzhuli.cn </dev/null 2>/dev/null | \
  openssl x509 -noout -dates -subject

# 2. 证书链是否完整
openssl s_client -connect kb.sirenzhuli.cn:443 -showcerts

# 3. 支持的 TLS 版本
nmap --script ssl-enum-ciphers -p 443 kb.sirenzhuli.cn

🎯 本章要点 ​

  • HTTP 状态码:2xx 成功、3xx 跳转、4xx 你错了、5xx 我错了
  • HTTPS = HTTP + TLS,证书验证身份 + 加密数据
  • curl 是 HTTP 排故瑞士军刀:-I 看头、-v 看过程、-k 跳过证书
  • 查证书到期:openssl s_client ... | openssl x509 -dates
  • 4xx/5xx 排查顺序:nginx error log → 应用日志 → 代码
加载练习题中...

有问题或补充?欢迎留言