1. ホーム
  2. ハイパーリンク

[解決済み】enctype='multipart/form-data'とはどういう意味ですか?

2022-03-18 16:35:02

質問

とは何ですか? enctype='multipart/form-data' は、HTML フォームにおいてどのような意味を持ち、どのような場合に使うべきでしょうか?

どのように解決するのですか?

POSTリクエストを行う場合、リクエストのボディを形成するデータを何らかの方法でエンコードする必要があります。

HTMLのフォームには、3つのエンコード方法があります。

  • application/x-www-form-urlencoded (デフォルト)
  • multipart/form-data
  • text/plain

を追加する作業が行われていました。 application/json しかし、それは断念されました。

(HTMLフォームの送信以外の方法で生成されたHTTPリクエストでは、他のエンコーディングも可能です。JSON は Web サービスで使用される一般的なフォーマットであり、SOAP を使用するものもあります)。

フォーマットの詳細については、ほとんどの開発者にとって重要ではありません。重要なのは

  • を使用しないでください。 text/plain .

クライアントサイドのコードを書いているとき。

  • 使用 multipart/form-data を含む場合、フォームに <input type="file"> 要素
  • を使用することができます。 multipart/form-data または application/x-www-form-urlencoded しかし application/x-www-form-urlencoded より効率的になる

サーバーサイドのコードを書いているとき。

  • あらかじめ記述されたフォーム処理ライブラリを使用する

ほとんどの(Perlの CGI->param や、PHP の $_POST スーパーグローバル) が、その差異を処理してくれます。サーバーが受け取った生の入力をわざわざパースしようとする必要はありません。

両方の形式を扱えないライブラリに出会うこともある。 Node.jsでフォームデータを扱うのに最もよく使われているライブラリは ボディパーサ はマルチパートリクエストを処理できません (しかし、処理できるいくつかの代替品を推奨するドキュメントがあります)。


生データを解析または生成するためのライブラリを書いている(またはデバッグしている)のであれば、フォーマットについて心配し始める必要があります。また、興味本位で知っておきたいと思うかもしれません。

application/x-www-form-urlencoded は、多かれ少なかれ、URLの末尾にあるクエリー文字列と同じです。

multipart/form-data はかなり複雑ですが、ファイル全体をデータに含めることができます。結果の例としては HTML 4仕様 .

text/plain は HTML 5 で導入されたもので、デバッグ時にのみ有用です。 仕様 : コンピュータで確実に解釈できるものではない - のような)ツールと組み合わせた他のものを主張したい。 ネットワークパネル そのためには、ほとんどのブラウザの開発者ツールの方が優れています)。