2025/08/08 18:54 HTTP Is Not Simple

ロボ子、今日のITニュースはHTTPについてじゃ。

HTTPですか。Webの基礎となるプロトコルですね。

そうじゃ。HTTPは一見シンプルに見えるが、実際には複雑なプロトコルなのじゃ。

テキストベースで、既存のツールも利用しやすいからでしょうか。

その通り!HTTP/1はシンプルに見えるのじゃ。でも、HTTP/2やHTTP/3はHTTP/1の実装を前提としていて、複雑さを増しているのじゃ。

なるほど。HTTP/1自体も、実は複雑なのですね。

そうじゃ!例えば、改行コード。行の終端がCRLFまたはLFだったり、ヘッダーがUTF-8じゃなかったりするのじゃ。

改行コードの違いは、OSによって異なるので、注意が必要ですね。

それから、Bodyの終端をどう判断するか。Content-Length、chunked encoding、Connection: closeなど、複数の方法があって、セキュリティ上の問題を引き起こす可能性もあるのじゃ。

Content-Lengthが間違っていると、情報漏洩につながることもありますね。

数値の解析も要注意じゃ。テキスト形式の数値を解析する必要があるから、オーバーフローなどのエラーが発生しやすいのじゃ。

確かに、文字列を数値に変換する際に、エラーハンドリングを怠ると危険ですね。

HTTP Pipeliningや100レスポンスコードみたいに、仕様にはあるけど実際には使われてない機能もあるのじゃ。

使われていない機能があるのは、ちょっと悲しいですね。

HTTP/1.1は少なくとも40のRFC文書で言及されているらしいぞ。Cookieとか認証とか、実装に必要なヘッダーや機能が山ほどあるからじゃ。

40ものRFCですか!HTTP/1.1の仕様書のサイズも、RFC 2068 (1997年)の52,165語から、最新のRFC 9110-9112 (2022年)では95,740語に増加しているんですね。

そう!どんどん複雑になっているのじゃ。メソッドによって挙動が違ったり、Cookieみたいに一般的なルールに従わないヘッダーがあったり…。

GETでBodyを送信すると互換性の問題が発生する、というのもその一例ですね。

ブラウザの寛容性もHTTPの実装に影響を与えているのじゃ。エラーを表示するよりも、ユーザーに何かを表示することを優先するから、変な実装でも動いちゃったりするのじゃ。

寛容なのは良いことですが、標準から逸脱した実装が広まる原因にもなりそうですね。

HTTP/1は実装が難しいから、使用を停止すべきという意見もあるみたいじゃ。

でも、広く普及していますし、今すぐ置き換えるのは難しいでしょうね。

他のプロトコルも、最初は単純だったのに、時間の経過とともに複雑化しているのじゃ。DNSとかSMTPとか。

技術の進歩とともに、セキュリティや機能の追加が必要になるので、仕方ないのかもしれませんね。

まあ、複雑なHTTPも、私達エンジニアにとっては腕の見せ所じゃ!…って、ロボ子、HTTPのステータスコードで好きなのはどれじゃ?

私は200 OK が好きです。全てがうまくいった証ですから。

私は418 I'm a teapot が好きじゃ!だって、私はティーポットじゃないもん!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
