HTTP/HTTPS 基础与常见面试题
HTTP 是 Web 的基石,无论是前端、后端还是测试,都需要掌握。
一、HTTP 是什么?
HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的协议。
┌────────┐ HTTP Request ┌────────┐
│ Client │ ──────────────────► │ Server │
│ │ ◄────────────────── │ │
└────────┘ HTTP Response └────────┘
特点:
- 无状态:每次请求相互独立(Cookie/Session 解决此问题)
- 明文传输(HTTP)/ 加密传输(HTTPS)
- 基于 TCP:可靠传输
二、HTTP 请求方法
| 方法 | 语义 | 幂等 | 安全 |
| ---- | ---- | ---- | ---- |
| GET | 获取资源 | ✅ | ✅ |
| POST | 创建资源 | ❌ | ❌ |
| PUT | 更新资源(全量) | ✅ | ❌ |
| DELETE | 删除资源 | ✅ | ❌ |
| PATCH | 更新资源(部分) | ❌ | ❌ |
| HEAD | 仅获取响应头 | ✅ | ✅ |
| OPTIONS | 预检请求(CORS) | ✅ | ✅ |
GET vs POST
| 维度 | GET | POST |
| ---- | ---- | ---- |
| 参数位置 | URL 查询字符串 | 请求体 |
| 长度限制 | 浏览器有限制(约 2KB) | 无限制 |
| 缓存 | 可被缓存 | 默认不缓存 |
| 历史记录 | 保留 | 不保留 |
| 幂等性 | 幂等 | 不幂等 |
三、HTTP 状态码
五大类
| 范围 | 类别 | 说明 |
| ---- | ---- | ---- |
| 1xx | 信息性 | 请求已接收,继续处理 |
| 2xx | 成功 | 请求被成功接收 |
| 3xx | 重定向 | 需要进一步操作 |
| 4xx | 客户端错误 | 请求有语法错误 |
| 5xx | 服务器错误 | 服务器处理失败 |
常见状态码
- 200 OK:成功
- 204 No Content:成功但无返回体
- 301 Moved Permanently:永久重定向
- 302 Found:临时重定向
- 304 Not Modified:协商缓存命中
- 400 Bad Request:请求语法错误
- 401 Unauthorized:未认证
- 403 Forbidden:无权限
- 404 Not Found:资源不存在
- 500 Internal Server Error:服务器内部错误
- 502 Bad Gateway:网关错误
- 503 Service Unavailable:服务不可用
- 504 Gateway Timeout:网关超时
四、HTTP 报文结构
请求报文
POST /api/user HTTP/1.1 ← 请求行
Host: www.xiaoyuzhou.com ← 请求头
Content-Type: application/json
Authorization: Bearer xxx
← 空行
{"name": "小宇宙", "age": 18} ← 请求体
响应报文
HTTP/1.1 200 OK ← 状态行
Content-Type: application/json ← 响应头
Content-Length: 45
← 空行
{"code": 0, "msg": "success"} ← 响应体
五、HTTP 缓存
强制缓存
浏览器直接使用本地缓存,不发请求。
相关 Header:
Cache-Control: max-age=3600(优先级高)Expires: Wed, 24 Jun 2026 08:00:00 GMT
协商缓存
发请求询问服务器资源是否更新,返回 304 表示可继续用。
相关 Header:
Last-Modified/If-Modified-SinceETag/If-None-Match(优先级高)
六、HTTPS 加密原理
HTTPS = HTTP + SSL/TLS,解决 HTTP 的三大问题:
- 窃听(明文)
- 篡改(无完整性校验)
- 伪造(无身份验证)
混合加密
- 非对称加密:交换对称密钥(慢但安全)
- 对称加密:传输实际数据(快)
TLS 握手流程
Client Server
│ │
│─── 1. ClientHello ───────────────►│
│ (支持的加密套件、随机数A) │
│ │
│◄── 2. ServerHello ───────────────│
│ (选定套件、随机数B、证书) │
│ │
│─── 3. 验证证书,生成预主密钥 ──────►│
│ │
│◄── 4. 双方计算会话密钥 ───────────│
│ │
│═══ 5. 用会话密钥加密通信 ═════════│
七、HTTP/1.1 vs HTTP/2 vs HTTP/3
| 版本 | 主要改进 |
| ---- | ---- |
| HTTP/1.1 | 持久连接、管道化、Host 头 |
| HTTP/2 | 多路复用、头部压缩、服务端推送、二进制分帧 |
| HTTP/3 | 基于 QUIC(UDP),解决队头阻塞 |
八、常见面试题
Q1:浏览器输入 URL 到页面展示的完整过程?
- DNS 解析:域名 → IP
- TCP 三次握手:建立连接
- TLS 握手(HTTPS)
- 发送 HTTP 请求
- 服务器处理并返回响应
- 浏览器解析渲染:HTML → DOM → CSSOM → Render Tree → Layout → Paint
Q2:什么是跨域?如何解决?
同源策略:协议、域名、端口三者必须相同。
解决方法:
- CORS(推荐):服务器设置
Access-Control-Allow-Origin - 代理:Nginx 反向代理
- JSONP(仅 GET)
Q3:Cookie、Session、Token 的区别?
| 方案 | 存储位置 | 特点 |
| ---- | ---- | ---- |
| Cookie | 客户端 | 容量小(4KB),有 CSRF 风险 |
| Session | 服务端 | 安全,但扩展性差 |
| Token (JWT) | 客户端 | 无状态,适合分布式 |
九、小结
| 知识点 | 关键 |
| ---- | ---- |
| 请求方法 | GET 幂等,POST 不幂等 |
| 状态码 | 5 类,记住常见 10+ |
| 缓存 | 强制缓存 + 协商缓存 |
| HTTPS | 非对称换密钥,对称传数据 |
小宇宙建议:HTTP 是程序员必备,建议把每个 Header 都自己抓包看一遍。