跳到主要内容

4.10. 处理 Application State

4.10. 处理 Application State (Handling Application State)

使用 HTTP 的 application 需要仔细考虑如何处理 state. HTTP 常被描述为 "stateless", 意味着每个 request 都是独立的, server 不需要记住之前的 request. 然而, 许多 application 需要某种形式的 state management.

HTTP application 中处理 state 有几种方式:

  • Client-side state: client 维护 state, 并在每个 request 中包含它. 这是最具可扩展性的方法, 但要求 client 管理 state.

  • Server-side state: server 维护每个 client 的 state, 通常由 session token 标识. 这对 client 更方便, 但对 server 可扩展性较差.

  • Resource state: state 表示为 resource, 可使用 HTTP method 检索和修改. 这与 REST principle 很好地契合.

application SHOULD 尽可能偏好 stateless design, 因为它们通常更具可扩展性, 也更容易部署. 当 state 必要时, application SHOULD:

  • 清楚规定 state 如何维护和标识.

  • 考虑使用 cookie [COOKIES] 进行 session management, 但要意识到其 security 和 privacy implication.

  • 避免在 server 上保留本可由 client 维护的 state.

  • 在适当时使用 authentication token 而不是 session.

  • 设计能够与 intermediary 和 cache 配合工作的 state management.

application SHOULD NOT 依赖 TCP connection persistence 等 feature 来维护 state, 因为 connection 可能被关闭或 multiplex.