HTTPマルチパートリクエストとは何ですか?


300

私はしばらくの間、iPhoneアプリケーションを作成し、あまり考えずに、サーバーにデータを送信し、(HTTPプロトコルを介して)データを受信して​​います。ほとんどの場合、理論的にはプロセスに精通していますが、あまり精通していないのはHTTPマルチパートリクエストです。私はその基本的な構造を知っていますが、その核心は私にはわかりません。

プレーンテキストとは異なるもの(写真、音楽など)を送信するときは常に、マルチパートリクエストを使用する必要があるようです。なぜそれが使用され、その利点は何ですか?

私がそれを使用する場合、写真をそのように送信する方が良いのはなぜですか?


1
詳細については、次のリンクを参照してください。http
zargarf

回答:


286

HTTPマルチパートリクエストは、HTTPクライアントがファイルとデータをHTTPサーバーに送信するために構築するHTTPリクエストです。通常、ブラウザやHTTPクライアントがファイルをサーバーにアップロードするために使用されます。


4
マルチパートフォームデータフィールドが順番に送信されることを追加したかっただけです。これはすぐに私はここにリンクのリストを追加obvious--だものではありません。github.com/balderdashy/skipper/blob/master/... 私はPhantomJS / WebKitのを使用して一緒にテストケースを置くためにいくつかの時間を取得する場合、私は追加しますそこにもリンク。ブラウザは、IE6までさかのぼって、仕様のこの部分に従います。
mikermcneil 2014

88
難しい部分は、ファイルアップロードリクエストのようなより明確なものではなく、マルチパートリクエストと呼ばれる理由を理解しています
Rafael Eyng 2015年

28
OPは哲学的なアプローチと答えを求めていました。この回答は、「なぜ」の部分を説明するものではありません。それは「何」の部分に関するものです。私はダウン投票の大ファンではありませんが、この答えはOPが望んでいたものではないので、私は探しました。
Saeed Neamati

6
コンテンツタイプ「application / x-www-form-urlencoded」は、非ASCII文字を含む大量のバイナリデータまたはテキストを送信する場合は非効率的です。コンテンツタイプ「multipart / form-data」は、ファイル、非ASCIIデータ、およびバイナリデータを含むフォームの送信に使用する必要があります。元のソース-w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal

2
こちらのfirebug
Piyush Chordia

22

公式仕様(https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html)が言うように、「1つ以上の異なるデータセットが 1つのボディに結合されます」。したがって、質問で述べたように写真と音楽がマルチパートメッセージとして処理される場合、おそらくいくつかのプレーンテキストメタデータも関連付けられているため、さまざまなタイプのデータ(バイナリ、テキスト)を含むリクエストが行われ、マルチパートの使用が示唆されます。


2
そうではないと思います。画像をアップロードすると、画像全体(メタデータを含む)がリクエスト本文の1セットのデータになります。本文にパートが1つしかない場合でも、それはまだマルチパートリクエストです。複数のファイルを一度にアップロードするリクエストを作成することもできます。
Dario Seidl

1
@DarioSeidl標準では、ファイルアップロード自体に加えて他のデータフィールドを含めることができるWebフォームからファイルアップロードを送信することを想定しています。たとえば、元のファイル名に加えて、ユーザーは説明を含めることができます。マルチパートは、特定の元の「ファイル」の概念から切り離された汎用バイナリBLOBも処理します。
イオノクラストブリガム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.