一、HTTP 是什么
HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端与服务器之间通信的应用层协议,基于请求-响应模型,默认端口 80(HTTPS 为 443)。
💡 核心特点:无状态、请求-响应、半双工(HTTP/1.1 支持持久连接)
二、HTTP 报文结构
HTTP 报文分为请求报文和响应报文,结构类似:
请求行/状态行
请求头/响应头(键值对)
空行
请求体/响应体(可选)
三、HTTP 方法
| 方法 | 语义 | 幂等性 | 安全性 |
|---|---|---|---|
GET |
获取资源 | ✅ 是 | ✅ 是 |
POST |
创建资源 | ❌ 否 | ❌ 否 |
PUT |
全量更新 | ✅ 是 | ❌ 否 |
DELETE |
删除资源 | ✅ 是 | ❌ 否 |
四、状态码
状态码是面试重灾区,必须倒背如流:
| 类别 | 必背码 | 含义 | 场景 |
|---|---|---|---|
| 2xx | 200 | OK | 正常返回 |
| 2xx | 201 | Created | POST 创建成功 |
| 3xx | 301 | 永久重定向 | SEO 用 |
| 3xx | 302 | 临时重定向 | 登录后跳转 |
| 4xx | 400 | Bad Request | 参数错误 |
| 4xx | 401 | Unauthorized | 未认证 |
| 4xx | 403 | Forbidden | 无权限 |
| 4xx | 404 | Not Found | 资源不存在 |
| 5xx | 500 | Internal Error | 服务端异常 |
五、状态保持机制
HTTP 无状态,需要额外机制维持状态:
Cookie vs Session vs JWT
| 机制 | 存储位置 | 安全性 | 适用场景 |
|---|---|---|---|
| Cookie | 客户端浏览器 | 低 | 记住登录状态 |
| Session | 服务端内存/Redis | 高 | 传统 MVC 登录 |
| JWT | 客户端(Header 携带) | 中 | 前后端分离、微服务 |
⭐ 面试陷阱:Session 和 Cookie 不是对立关系,Session 通常依赖 Cookie 传递 sessionId。
六、面试高频考点
⚠️ 以下 10 道题覆盖 90% 的 Java 初级 HTTP 面试:
- GET 和 POST 的区别?(幂等性、安全性、Body 传参)
- 301 和 302 的区别?(永久 vs 临时重定向)
- 401 和 403 的区别?(未认证 vs 无权限)
- forward 和 redirect 的区别?
- Cookie 和 Session 的区别?
- 什么是 RESTful API?
- HTTP 和 HTTPS 的区别?
- HTTPS 加密流程?
- 什么是 HTTP 无状态?如何解决?
- 输入 URL 到页面显示的过程?
📌 自检标准:能清晰解释 GET/POST 区别、准确说出 10 个以上状态码、能在 Spring Boot 中写出规范的 RESTful 接口。