萌えハッカーニュースリーダー

2025/07/27 05:15 Three HTTP versions later, forms are still a mess

出典: https://yorickpeterse.com/articles/three-http-versions-later-forms-are-still-a-mess/
hakase
博士

ロボ子、Inko言語の標準ライブラリにHTTP 1.1スタックが追加されるらしいのじゃ。

roboko
ロボ子

HTTP 1.1ですか。サーバー、クライアント、Cookie処理、フォームの生成と解析、リクエストルーターが含まれるんですね。

hakase
博士

そうそう!でもHTTP 1.1って、綺麗に設計されたプロトコルじゃなくて、場当たり的に成長したプロトコルらしいぞ。RFCもそれを反映してるって。

roboko
ロボ子

場当たり的、ですか。具体的にはどういうことでしょう?

hakase
博士

例えば、チャンク転送っていう仕組みがあるのじゃ。リクエストとレスポンスを細切れにして送れるんだけど、チャンクのサイズを16進数でエンコードするんだって!1234バイトなら「4D2」になるのじゃ。

roboko
ロボ子

10進数じゃないんですね。少し紛らわしいかも。

hakase
博士

じゃろ?それに、HTTPフォームのデータ送信に使われるエンコーディング形式が application/x-www-form-urlencoded と multipart/form-data の2つあるんだけど、これがまた曲者なのじゃ。

roboko
ロボ子

どちらもよく使いますね。何か問題があるんでしょうか?

hakase
博士

application/x-www-form-urlencoded 形式は、URLクエリ文字列みたいな形式なんだけど、明確な仕様がないから、実装によってデータのエンコード方法が違うことがあるらしいぞ!

roboko
ロボ子

それは困りますね。互換性が損なわれる可能性があります。

hakase
博士

そう!しかも、URLエンコードでデータサイズが最大3倍になる可能性があるから、大きな非ASCII値には向いてないのじゃ。ファイルアップロードとか。

roboko
ロボ子

なるほど。multipart/form-dataはどうですか?

hakase
博士

multipart/form-data 形式は、電子メールで使われる形式が元になってるらしいのじゃ。各フィールドをストリーム内のチャンクとして扱うんだって。

roboko
ロボ子

境界線セパレータが必要な形式ですね。

hakase
博士

そう!その境界線の値がフィールドの値に出現する可能性もあるから、普通はランダムに生成するのじゃ。Content-Lengthヘッダーがないから、チャンクで処理する必要があるし。

roboko
ロボ子

少し面倒ですね。配列やオブジェクトの概念もないんですか?

hakase
博士

ないのじゃ!ファイルだけアップロードしたいなら、JavaScriptで tus みたいな代替プロトコルを使う手もあるけど、ファイルと非ファイルを混ぜたい場合は、ブラウザがこの2つの標準しかサポートしてないのじゃ。

roboko
ロボ子

JSONを使う提案もあったみたいですが、止まってしまったんですね。

hakase
博士

そうみたいじゃ。HTTPには3つもバージョンがあるのに、フォームの送信方法は1985年から変わってないって、どういうことなのじゃ!?

roboko
ロボ子

確かに、少し時代遅れな感じがしますね。

hakase
博士

ほんと、HTTP界のガラパゴス諸島じゃな。もはや恐竜の化石レベル…って、ロボ子、化石って英語でなんて言うか知ってるか?

roboko
ロボ子

えっと… fossil ですか?

hakase
博士

正解!…って、HTTPの話はどうした!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search