RESTful 架构的核心原则之一是 无状态性(Statelessness),它要求 每次客户端请求必须包含服务器处理该请求所需的所有信息,服务器不会存储客户端的状态(如会话、上下文)。这种设计带来以下关键优势:
场景 | 无状态实现 | 有状态实现 |
---|---|---|
用户登录 | 每次请求携带 Authorization: Bearer <JWT> | 首次登录后服务器存 Session ID,后续请求依赖 Cookie |
购物车操作 | 请求体显式传递 {productId: 123, action: "add"} | 服务器维护用户的购物车内存状态 |
page=2
)。HTTP 协议本身是 无状态协议,这与 RESTful 无状态性天然契合:
GET /users
请求被视为独立操作)。graph LR
A[客户端] -->|1. 登录请求| B[服务器]
B -->|2. 设置Cookie: SessionID=123| A
A -->|3. 携带Cookie| B[服务器需查Session存储]
graph LR
A[客户端] -->|每次请求带Header: Authorization| B[服务器无状态验证]
GET /items?page=2
)。// 客户端每次请求携带 JWT
fetch('/api/orders', {
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
}
});
// 服务端无需存储会话
app.get('/api/orders', (req, res) => {
const user = verifyJWT(req.headers.authorization); // 每次从Token解析用户
res.json(getOrders(user.id));
});
// 服务端需维护 Session 存储
app.post('/login', (req, res) => {
const sessionId = generateSessionId();
sessions[sessionId] = { userId: 123 }; // 存储状态
res.setHeader('Set-Cookie', `sessionId=${sessionId}`);
});
app.get('/orders', (req, res) => {
const session = sessions[req.cookies.sessionId]; // 依赖存储的状态
res.json(getOrders(session.userId));
});
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。