0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

httpの「ステートレス」とは

Last updated at Posted at 2025-02-19

2025/02/19

状況

  • 「httpは本来ステートレスで」って説明したら、「そもそもステートレスって何?」と質問された。

目的

  • ステートレス、ステートフルの考え方を理解する。 #ステートレスは平等。退かぬ、媚びぬ、顧みぬ、って感じ
  • httpの基本仕様を理解する #文書運搬規約でしかない
  • httpで何がしたいか理解する #さっき送った文書に書いてある名前を相手に覚えてほしい
  • httpに何をさせているか理解する #運搬内容にIDとか入れておいてもらっている

ステートレス、ステートフルとは

ステート(state): 状態、状況、様子、健康状態などを意味する英語の単語
ステートレス、ステートフル : ステート(前後の状況)に応じて処理の仕方を変えるかという考え方、アーキテクチャ。変えない場合ステートレス。変える場合ステートフル。
→相手が誰であろうと、絶体絶命の状況であろうと、帝王に逃走はない、とか、誰にでも平等な対応でステートレス。
→この文書の対象読者なら、主にwebの文脈の言葉で、ログイン関係と思って良いはず。
→他の文脈だと、セキュリティの文脈で、ステートフルインスペクション、とかで出てくるけど、今は気にしなくて良いと思う。
→webサイトの挙動の例

  • qiita : ログイン前後で「ログイン」ボタンの表示有無を制御 : ステートフルな挙動
  • デジタル庁HP : 多分誰がアクセスしても同じ情報が表示される : ステートレスな挙動

httpの基本仕様

以下のページが必要十分に分かりやすく解説してくれています。

  • 文書などの情報をやりとりする時に使われる通信手順(プロトコル)
  • 1990年前後に開発
  • 別途cookieなどの技術を組み合わせて使うことで複数回のやりとりを追跡

httpで何がしたいのか

1990年以降、みんなが「web」を使い始めたので、「web」で通販とか商売したくなった。

→「認証」「認可」「アカウンティング」(AAA)などが必要になってきた。 #今回の話。
→「機密性」なども必要になってきた。 #また別の話。

>別途cookieなどの技術を組み合わせて使うことで複数回のやりとりを追跡
→クッキーってなにそれ?おいしいの?

「Cookie」:HTTPの状態管理メカニズム。webサーバーとクライアント間で状態を保持し、セッション管理やユーザー認証などの機能を実現。

2000年10月 RFC2965 https://tex2e.github.io/rfc-translater/html/rfc2965.html

2011年04月 RFC6265 https://tex2e.github.io/rfc-translater/html/rfc6265.html

ということで、HTTPクライアントとサーバー間でのセッション管理のために、
httpというプロトコルの開発後10年とか20年かけて技術的な拡張をしていったという感じですね。

↓万能ということではないよ、という話。法律対応で良くクッキーのポップアップ出るようになりましたね。

7. プライバシーに関する考慮事項
Cookieは、サーバーにユーザーを追跡させるためにしばしば批判されます。

8.1. 概観
Cookieには、多くのセキュリティ上の落とし穴があります。このセクションでは、いくつかの重要な問題について概説します。

   7. Privacy Considerations .........................................28
      7.1. Third-Party Cookies .......................................28
      7.2. User Controls .............................................28
      7.3. Expiration Dates ..........................................29
   8. Security Considerations ........................................29
      8.1. Overview ..................................................29
      8.2. Ambient Authority .........................................30
      8.3. Clear Text ................................................30
      8.4. Session Identifiers .......................................31
      8.5. Weak Confidentiality ......................................32
      8.6. Weak Integrity ............................................32
      8.7. Reliance on DNS ...........................................33

↓実装イメージ

1. はじめに
このドキュメントでは、HTTP CookieおよびSet-Cookieヘッダーフィールドを定義します。
Set-Cookieヘッダーフィールドを使用して、HTTPサーバーは名前/値のペアと関連するメタデータ(Cookieと呼ばれる)をユーザーエージェントに渡すことができます。
ユーザーエージェントがサーバーに後続のリクエストを行うと、ユーザーエージェントはメタデータとその他の情報を使用して、Cookieヘッダーで名前と値のペアを返すかどうかを決定します。

ということで、キーバリューの形式のテキストデータ、となります。json形式も可能。
自分のブラウザがどんなクッキーを食べているのか、何が書いてあるのか、見てみましょう。

chromeでの確認方法

httpに何をさせているか

結局、http自体は変わらず運搬しているだけ。
クライアント側は求められるデータの送信、もらったクッキーの保管をしているだけ。
httpサーバ、webサーバ側が、送られてきたデータから、クッキーを確認して、業務ロジックを実装、実行しているというだけ。
ログインなら、ログインのロジックを実装、実行し、ユーザ名をDBなどから取得して、画面に変数として埋め込んでブラウザに返却、などなど。

詰まり、あくまで「httpはステートレス」。記憶する主体はhttpサーバである。認証のデータはCookieとしてやり取りされる。

補足 httpの歴史

とても分かりやすく、また、最近の把握すべき用語である「QUIC」の説明もあります。

補足 なぜ「クッキー」?

The name

I had heard the term "magic cookie" from an operating systems course from college.
The term has a somewhat similar meaning to the way Web Cookies worked 
and I liked the term "cookies" for aesthetic reasons.
Cookies was the first thing I came up with and the name stuck.   

由来はUNIXの機能みたいですね。
そして詰まりは、やり取りするデータ、くらいの意味合いみたいですね。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?