
ステートレスとかステートフルってどういう意味?
HTTPはどっちなの?
こういった疑問にこたえます。
- ステートレスとステートフルの違いがわかるようになる
- HTTPプロトコルの弱点がわかる
エンジニアの僕がわかりやすく解説します。
ステートレスとステートフルの違い
ステートレスとステートフルの違いは、直前にやりとりした相手の状態を以降のやり取りでも覚えているか覚えていないかです。
- ステートレス
以前のやり取りを覚えていない - ステートフル
以前のやり取りを覚えている
状態を保持しないのでHTTPではリクエスト/レスポンスの1往復のやり取りが完結された処理とみなされ、複数の処理を関連付けることができません。

一方、「状態を保持」しておき、次の処理内容に反映させるような方式をステートフルと言います。
ステートフルなシステムの場合は1対1の場合はサーバに負荷がかかることはないですが、1対多の場合は複数のクライアントの情報をサーバが保持しておく必要があり、負荷が高くなります。

Webシステムの場合は多数のクライアントからの接続が発生します。
なのでWebシステムで利用されるHTTPでは、状態を保持することなく要求された内容を応答するだけのステートレスな設計が適しています。
HTTPの弱点
Webが進化するにつれて、HTTPがステートレスであるために困ることが増えてきました。
例えば、ログインやネットショッピングの買い物かごなどといった動作はWebサーバから見るとWebブラウザからの異なる動作(HTTPリクエスト)になります。
買い物カゴに入れた中身を確認しようとしても、サーバは前後のHTTPリクエストの関連性がわからないため買い物かごの中身を返すことができません。
実際のショッピングサイトでは、買い物かごに入れた商品を確認したり、商品を購入できたりします。
これはHTTPの機能を補完する別の仕組みとして、以前の状態を踏まえた上で次の動作を処理するといった、状態を保持し管理する仕組みが導入されているためです。
これらの仕組みについては「Cookieとは?わかりやすく解説する」と「Sessionとは?わかりやすく解説する」の記事で解説しています。
HTTPはステートレスまとめ
解説の内容をまとめます。
- ステートレス
以前のやり取りを覚えていない - ステートフル
以前のやり取りを覚えている - HTTPはステートレスのプロトコルであるため弱点を補完するための仕組みがある
以上、お疲れ様でした。
コメント