📘

【初学者によるまとめ】この一冊で全部わかるWeb技術の基本 「Chapter3」>「12 ステートフルとステートレス」

2024/12/09に公開

目的:「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめ、Qiitaへアウトプットして理解力の向上に努める。

注意点
🤔 ←この絵文字の文章は個人的な見解になります。的外れなこともあるかと思います。
例)🤔<(感想、考察、疑問点など)

(参考書籍)

  1. イラスト図解式 この一冊で全部わかるWeb技術の基本

(参考サイト)

  1. Apidog
  2. MDN Web Docs

:::note info
以下の2点の通り、通信の処理方式には「内部状態を情報として記憶するか否か」がプロトコルとしてある

  • ステートレス(Stateless)…「サーバー側で状態を保持しない」
    • リクエスト/レスポンスの1往復でやり取りが完結されたものとみなされ、
      以前のリクエストやトランザクションとの関連性や依存関係を持たない
  • ステートフル(Stateful)…「サーバー側で状態を保持」
    • クライアントとサーバー間の状態(状態情報)を保持する
      :::

ステートフル

  • 『「以前の通信の結果」を"状態"として記憶』するプロトコルをステートフルという
    • 一見してこのプロトコルに問題はなさそうであるが、不特定多数のクライアントに対してステートフルな通信をするとなると「不特定多数の"状態"データを記憶し、それぞれのクライアントごとの"状態"データにあった処理を提供」しなければならなくなるので負荷が大きくなってしまう

:::note warn

  • ステートフルな通信はWebアプリのような不特定多数をクライアントとする場合に適さない
    • ステートを情報管理する負担があまりにも大きいため
      :::

ステートレス

*ステートフルはWebアプリなど利用者が多く、たくさんの処理を素早く処理することが求められる場合には適さない

  • HTTP は特徴としてステートレスであることが挙げられる
    • "状態"データを保持しないためサーバー側の負担が抑えられ、結果として素早い処理に繋がる

:::note warn

  • ステートレスな通信は以前の通信結果や相手の状況などの"状態"データを一切保持せず毎回リセットする
    • ステートを管理する負担がないため多くの利用者や通信が想定されるWebアプリの設計として適している
  • 故にHTTPで採用されている
    :::

HTTPの弱点

▲一方で、HTTPの特徴である「"状態"データを一切保持せず毎回リセット」されては困るケースがある
 >例)「ECサイトにおける商品カゴ」「ログイン状態」など

  • このような場合のために、HTTPの弱点を補完する「状態を保持する仕組み」が存在する
    • HTTP Cookieという仕組みによって、ステートレスなHTTPにステートフルなセッションという状態データの保持を実現できる

:::note warn

  • HTTPでは"状態"データを一切保持しないため、実装したいシステムの要件を満たせない場合がある
    • その弱点を補完するためHTTP Cookieという仕組みが導入されている

HTTP はステートレスであるがセッションレスではない
:::

Discussion