次のツイートにブクマが集まっていたが、論点が整理されていないようなので、主にCookieの出自について記述する。
cookieは命名で失敗し「魔術的な」技術と勘違いされてる。実際はすごくシンプル。①サーバがSet-CookieヘッダでIDを通知する、②クライアントは以降CookieヘッダにそのIDを設定する、③それによりサーバはクライアントを区別できるようになる。ただそれだけ。もったいぶってる説明はほぼ間違ってる。
Cookieという単語に「魔術的な」意味など元々なかったし、本来単なるデータストアである(ゆえにセッションIDも格納できる)。元ツイートの主張はおかしいし、元ツイートが腐しているspeakerdeckの内容はそんなに間違っていない。
結論として、元ツイが「現在のCookie」の話しかしていないから論点がずれている。歴史的なCookieの在り方はデータストアだった。また、現在でも一部でデータストア的に使用されている
なるほどね。それでは1つずつ見ていこう。
現在にフォーカスを当てれば、Cookieは「基本的にセッションIDを格納する場所」と説明すれば良いが(Slideもそう書いてるよ?)、元々はデータストアである。元ツイは歴史的ファクトと現代的実装のスタンダードを混同しているように感じる。2022年に「Cookieっていうのはー、ユーザ名とか個人情報を保存しておける便利なデータストアだよ」っていうと単なるやべー奴だが、1997年から2000年ごろまでは普通にそういった実装がなされていた。性善説の時代だったのである。
「嘘だろ」と言われそうなので、1997年のRFC2109を引用する
https://datatracker.ietf.org/doc/html/rfc2109
POST /acme/shipping HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"; Part_Number="Rocket_Launcher_0001"; $Path="/acme" [form data]
普通にユーザー名とか買い物かごの中身をCookieに保存している。今この実装をする奴はヤベーが、1997年はそういう時代だったのである。
Cookie: $Version="1"; session_id="1234"; session_id="1111"; $Domain=".cracker.edu"
セッションIDの例もあるが、なんと数字4桁である。今こんなことをしたら確実に徳丸本の角で頭を殴られる。当時のインターネットがいかに性善説の上に成り立っていたか分かるだろう。
この主張も誤りである。例えばja.wikipedia.orgでは、アカウント名や利用者のおおよその住所などをCookieに仕込んでいる。セキュリティ的にザルだと思うなら、ぜひ直接殴り合って欲しい。
元ツイではMagic Cookieを「魔術的なクッキー」と解釈している(なんでも魔法のようにできる多機能な……って感じ?)ようだが、ここでいうMagicとは魔術のことではないだろう。Magic NumberとかMagic WordのMagic(利用者が理解していなくても有効なもの)と考えた方が意味が通る。これはMagic Cookieの語源となったfotune cookieの語義に通じるところもある。
fortune cookieとは。文字が書かれた紙片を封入した焼き菓子である。HTTP Cookieはクライアント・サーバとも内容について問わない(紙片に何を書いてもいい)し、捨てても無視しても構わない(食べなくても割らなくても良い)ためにこの名前がついたのだろう。任意の情報をラップしたものというメタファーとして適切に思えるし、Magicという形容詞も適切であると考える。
1つあたり容量が4kBしかないのも可愛らしい。クッキーでいいんじゃないか。逆に何だったら良かったのか。
そんなに間違ったことは書いていない気がするが……。現在ほとんど使われない技術が書いてあったとして、それが何……?とはなる。Slideはaxiosの使い方を示してるだけだし、2年前の記事に対して「情報が古い」ってツッコミも微妙ではある。
結局何に怒って何を否定しているのかよく分からなかった。SunのX端末を使っていたということなので、最近の事情しか知らないというわけでもなさそうなのだが。
ツリーを眺めているとあまり期待はできなさそうだが、元ツイの人はもう少し丁寧な議論をして欲しいところだ。