4.10. Handling Application State (アプリケーション状態の処理)
4.10. Handling Application State (アプリケーション状態の処理)
HTTP を使用するアプリケーションは, 状態をどのように処理するかを慎重に検討する必要があります。HTTP はしばしば "ステートレス" と表現されます。つまり, 各リクエストは独立しており, サーバーは以前のリクエストを記憶する必要がありません。ただし, 多くのアプリケーションは何らかの形式の状態管理を必要とします。
HTTP アプリケーションで状態を処理するにはいくつかの方法があります:
-
クライアント側の状態: クライアントが状態を維持し, 各リクエストに含めます。これは最もスケーラブルなアプローチですが, クライアントが状態を管理する必要があります。
-
サーバー側の状態: サーバーが各クライアントに関する状態を維持します。通常はセッショントークンによって識別されます。これはクライアントにとってより便利ですが, サーバーのスケーラビリティは低下します。
-
リソース状態: 状態は HTTP メソッドを使用して取得および変更できるリソースとして表現されます。これは REST 原則とよく一致します。
アプリケーションは可能な限りステートレス設計を優先すべきです (SHOULD)。これらはよりスケーラブルで, 展開が容易になる傾向があるためです。状態が必要な場合, アプリケーションは次のことをすべきです (SHOULD):
-
状態がどのように維持および識別されるかを明確に指定する。
-
セッション管理に Cookie [COOKIES] を使用することを検討しますが, そのセキュリティとプライバシーへの影響に注意してください。
-
クライアント上で維持できる状態をサーバー上に保持することを避ける。
-
適切な場合はセッションではなく認証トークンを使用する。
-
中間者やキャッシュと連携するように状態管理を設計する。
アプリケーションは, 状態を維持するために TCP 接続の永続性などの機能に依存すべきではありません (SHOULD NOT)。接続は閉じられたり多重化されたりする可能性があるためです。