ミッションたぶんPossible

どこにでもいるシステムエンジニアのなんでもない日記です。たぶん。

人はHTTP STATUS CODEによってその存在を定義あるいは説明できるのか、またはその思考実験

初めに

 この記事はいくおの Advent Calendar 2024 - Adventarの8日目です。


 はじめまして、タキガワヨーイチといいます。今回あえて自称を「ヨウイチ」ではなく「ヨーイチ」としたところが今回の要素で、それゆえこの後すぐ出てきますがしかしながら試験にもこの後の貴方の人生にも一切出てきませんのでこの記事読み終わったら忘れていいです。加えて言付けしておくならタキガワヨーイチもタキガワヨウイチもその存在自体も忘れていいです。
 読んでいる貴方にとって大事なのは、貴方は「いくお」の縁に導かれてたまたまこの記事にたどり着いた、ただそれだけです。

 「いくお」を崇め奉り信じよ、さすれば救われん。


 さて、オレごときがかの著名且つ偉大であり、町田が誇る唯一無二で天上天下唯我独尊なSGEM*1であられる小田中育生さんを語る資格があるのか、と問われれば、おこがましくもそのような立場を望むことさえ許されないですしそのようなことを頭によぎった瞬間に今すぐ腹を斬って死ぬべきだと判断して腸をその場にぶち撒けるのが正しい所作だと世界の摂理に定められておりますが、これが「いくお」であればその限りではありません。なぜならばオレと「いくお」との間には僅かながら共通点が存在します。

 聡明な読者の方は既にお気づきですね?



 そう、語呂合わせです。



 「いくお」は「1 (い)」「9 (く)」「0 (オー)」と語呂合わせにできます。
同様に「ヨーイチ」も音で分解すれば「ヨオイチ」つまり「4 (ヨ)」「0 (オー)」「1 (イチ)」と語呂合わせにできます。
「0」を数字のゼロではなくアルファベットの「O (オー)」でこじつけるのも一緒です。

 また重要な点として、2つの語呂合わせが双方とも3桁の数字であることにも着目しましょう。パッと思いつく3桁の数値とは? そう、HTTP STATUS CODEです!

 というわけで、本記事ではHTTP STATUS CODEというたった3文字の数値から「いくお」という存在を紐解いてみましょう。
(なお、本記事における主張や論法がやや強引だという意見は認めるが、本記事においては敢えて無視するものとする)


HTTP STATUS CODE とは?

 さて、3桁の数字でHTTP STATUS CODEに思い至るのがあくまで世界の摂理のように話を進めてきましたが、決してそんなことはないので知らない人のために簡単に説明していきます。
長ったらしくて読むのが面倒な人は引用箇所はすっ飛ばして大丈夫です。


HTTPステータスコード

HTTPステータスコードは、HTTPにおいてWebサーバからのレスポンスの意味を表現する3桁の数字からなるコードである。RFC 7231等によって定義され、IANAがHTTP Status Code Registryとして管理している。

引用元 : HTTPステータスコード - Wikipedia


Request for Comments (RFC)

IETF(Internet Engineering Task Force、インターネット技術特別調査委員会)による技術仕様の保存、公開形式である。内容には特に制限はないが、プロトコルやファイルフォーマットが主に扱われる。
RFCとは「コメント募集」を意味する英語の略語であり、もともとは技術仕様を公開し、それについての意見を広く募集してより良いものにしていく観点から始められたようである。今日では、Internet Engineering Task Force (IETF)やインターネットアーキテクチャ委員会 (IAB)、およびコンピュータネットワーク研究者の世界的なコミュニティの公式発表の場となっている。

引用元 : Request for Comments - Wikipedia


Internet Assigned Numbers Authority (IANA)

Internet Assigned Numbers Authority(IANA、アイアナ、インターネット番号割当機関)とは、インターネットに関連する識別子を管理する機能である。IPアドレス・ドメイン名・トップレベルドメイン・ポート番号等の割り当て・管理などを行う。
アメリカの南カリフォルニア大学のISI所属のジョン・ポステルが中心となって始めた。当初は運営費用の一部がアメリカ政府により援助されていたが1998年にICANNが発足するなどインターネットの管理体制が変化し、2000年にその役割はICANNに引き継がれ、IANAはICANNにおける機能の名称となった。2016年からはICANNの子会社であるPublic Technical Identifiers (PTI) がその機能を担っている。

引用元 : Internet Assigned Numbers Authority - Wikipedia


 語源をいくつか引用しましたが、要は「インターネットで閲覧しようとしたサイト・サービスの状態を知るための3桁の数値」を指します。有名なのは「200 OK」とか「404 Not found」とかですね。

 HTTP STATUS CODEには100番ごとに大きな区切りがあり、以下のように定義されています。100, 200, 300系が正常系で、400, 500系が異常系……つまりエラーであることを指します。

  • 100ç³» : 情報 - リクエストに対して処理が続行されていることを示す
  • 200ç³» : 成功 - リクエストが正常に処理されたことを示す
  • 300ç³» : リダイレクション - 追加のアクションが必要であることを示す
  • 400ç³» : クライアントエラー - リクエストに問題があり、処理できなかったことを示す
  • 500ç³» : サーバーエラー - サーバーに問題があり、処理できなかったことを示す


 その3桁の数字が担うメッセージの役割が、100番ごとに大きく区分けされ、さらにその中で細かく定義されています。例えばオレの「401」ですが、以下のように定義されています。

401 Unauthorized

The 401 (Unauthorized) status code indicates that the request has not been applied because it lacks valid authentication credentials for the target resource. The server generating a 401 response MUST send a WWW-Authenticate header field containing at least one challenge applicable to the target resource.
If the request included authentication credentials, then the 401 response indicates that authorization has been refused for those credentials. The user agent MAY repeat the request with a new or replaced Authorization header field. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user agent SHOULD present the enclosed representation to the user, since it usually contains relevant diagnostic information.


401(Unauthorized)ステータスコードは、対象リソースに対する有効な認証資格情報が不足しているために、リクエストが適用されていないことを示します。401レスポンスを生成するサーバーは、対象リソースに適用可能な少なくとも1つのチャレンジを含むWWW-Authenticateヘッダーフィールドを送信しなければなりません(MUST)。
リクエストに認証資格情報が含まれていた場合、401レスポンスはその資格情報による認可が拒否されたことを示します。ユーザーエージェントは、新しいまたは置き換えられたAuthorizationヘッダーフィールドを使用してリクエストを再送することができます(MAY)。401レスポンスが以前のレスポンスと同じチャレンジを含み、かつユーザーエージェントがすでに少なくとも一度認証を試みている場合、ユーザーエージェントは通常、診断情報を含む関連する表現をユーザーに提示するべきです(SHOULD)。

引用元 : RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication / 翻訳 : ChatGPT


 早い話が「(例えばID/PWなど、なんらかによる)認証が必要なのに、認証を行うための情報が無い (もしくは間違っている)よ」という意味です。端的に言うと「認証エラー」ですね。


 ちなみに、「HTTP STATUS CODE 401 Unauthorized」はRFC 7235で定義されました。RFC 7231にはまだ定義されてなかったんですが、その時点で401は抜け番となっていた模様。RFC 7235は認証に関する定義を行っているので、RFC 7231では掲載を見合わせてたのかもですね。この辺はもうちょっと調べてみたいところです。
 さらに加えて、よく同じ意味合いで混同されがちな「HTTP STATUS CODE 403 Forbidden」ですが、こちらは権限エラー、つまり閲覧したり実行する資格を持ってないので閲覧・実行できない状態のことを指します。
401が認証していない、403が認証はしたけど権限が無い、と理解しておけば大まかには良さそうです。
詳しくは以下の記事に説明があるので、興味がある人は読んでみてください。

www.freecodecamp.org



 HTTP STATUS CODEによると、つまりオレ(401)は以下のような存在であることが定義・説明できます。

  • 異常系である
  • クライアントエラーである = 当人に問題がある
  • 認証を行っていない存在である
  • 権限を持っていないかどうかまでは定かではない (未認証のためその段階に至れていない) 存在である
  • 当初はその定義がなされておらず、後追いで定義された = アウトローな存在である

 これがどこまで正しいかについては、あくまで第三者の目から極めて冷静に検証・定義されるべきだと思いますので、ここではオレ自身からは言及を避けたいと思います。



本題:「190 (いくお)」をHTTP STATUS CODEから定義づける

 さて、本題の「190」です。が、実はRFCにはHTTP STATUS CODEって100~103までしか定義されてないんです。ΩΩΩ<ナ、ナンダッテー

  • 100 Continue : 継続。クライアントはリクエストを継続できる。サーバがリクエストの最初の部分を受け取り、まだ拒否していないことを示す。
  • 101 Switching Protocols : プロトコル切替。サーバはリクエストを理解し、遂行のためにプロトコルの切り替えを要求している。
  • 102 Processing : 処理中。WebDAVの拡張ステータスコード。処理が継続されて行われていることを示す。
  • 103 Early Hints : 早期のヒント。最終的なレスポンスヘッダが確定する前に、予想されるヘッダを伝達する。Linkレスポンスヘッダと組み合わせて、関連するリソースの先読み・プッシュ配信に利用することが想定されている。

引用元 : HTTPステータスコード - Wikipedia


 本当に無いのかと調べていたら、なんと見つかりました!MastercardのAPIが190を定義・利用していることが分かりました。
mc-paymentgatewayservice.my.site.com


 エラーの内容としては「キャプチャ方法が指定されておらず処理が継続できない」ことを指しています。が、RFCで定義されておらず他でも見当たらないので、Mastercardが独自に定義し利用しているものと判断できます。
 このドキュメントを見る限りではクライアント起因のエラーに見えるので本来なら400系を割り当てるのが適切な気がしますし、そもそもとしてこの190がHTTP STATUS CODEと断言できるような記述箇所は無いので、このAPI内独自のコードとして取り扱っているのかもですね。
 ただ、RFCに定義されていないからと言って、他者に迷惑をかけない範囲で身内で閉じてHTTP STATUS CODEの拡張として定義→使用する分にはそれほど問題ない気がします。



結論

 さて、ここまでのまとめです。

 HTTP STATUS CODEから「いくお (190)」を定義・説明しようとした場合、以下のような結論が得られます。

  • 「いくお (190)」は正常 (100) ç³»
    • 「いくお (190)」は処理継続中であることを表す
  • 「いくお (190)」はRFCでは定義されていない
    • RFCで定義されていないからと言って使っていけないわけではない
    • 他者の迷惑にならない範囲で定義・利用するのであれば問題はない


 言葉にまとめるのであれば以下のようになるでしょう。


「いくお (190)とは、正しい行いを行っている姿・様子・存在であり、それは現在も進行中であることが見て取れる。だがしかし世界の誰かに定義されるような存在ではなく、信望する者の心にのみその在り様が刻まれるものである」


 納得感しかないですね。HTTP STATUS CODEからも十分に「いくお」という存在を定義・説明できることが確認できました。



提案

 誰もが頷く結論を導き出すことができたのでオレ個人としては満足しており、ここで筆を置くこともやぶさかではなかったのですが、しかして提言者としてこのまま放言して省みないのも無責任かなと思いました。最後に「190 (いくお)」についてさらに踏み込んでみたいと思います。


 結論で示した通り、「いくお (190)」とは正常系であり処理継続中であり、誰かの定義の枠にはまることなく、己が道を行く存在として独自にその姿勢を示すことができる、そんな存在であることは既に誰も疑うことができない事実であります。
 ですが、「処理継続中」とはなんでしょう?「190」とはどのような状態を継続している様子を指すステータスコードなのでしょうか?


 そんな最中、我が探検隊はネットの奥地でこの世の真理に重要な影響を及ぼす証拠を発見したのであった!

















発見現場 : https://x.com/dora_e_m/status/1832027593362858481/





すなわち!「いくお (190)」とは!「ビールを飲んでいる状態 (継続中)」を指すものだったのだ!!



用例:

  • 「おっ!花金*2の夜にさっそく190ってますね」
  • 「あーごめん、今ステータスコードが190だから車で迎えに行けないわ」


 今後はビールを飲んでいる様子を表す際は「190」を使用されるのが宜しいかと思います。



終わりに

オレからの調査報告は以上です。
明日からも継続される更なる「いくお」に関する調査報告に、一研究者として期待し、座して待ちたいと思います。

※本記事の内容はすべてギャグです。真に受けないように。

*1:スーパーグレードエンジニアリングマネージャー、元ネタが分からない人はキャプテン翼を読め

*2:死語。なお同義語の「プレミアムフライデー」も既に死語となっている