web-dev-qa-db-ja.com

Postman Chromeアプリケーションのform-data、x-www-form-urlencoded、rawの違いは何ですか?

WebサービスのテストにPostman Chrome拡張機能を使用しています。データ入力に利用可能な3つのオプションがあります。生はJSONを送信するためのものだと思います。他の2つ、form-dataとx-www-form-urlencodedの違いは何ですか?

167
Rohan

これらは、W3Cによって定義されているさまざまなFormコンテンツタイプです。単純なテキスト/ ASCIIデータを送信する場合は、x-www-form-urlencodedが機能します。これがデフォルトです。

しかし、もしあなたがASCII以外のテキストや大きなバイナリデータを送らなければならないのなら、form-dataがそのためです。

プレーンテキスト、JSON、またはその他の種類の文字列を送信する場合は、Rawを使用できます。名前が示すように、Postmanはそのままの文字列データをそのまま送信します。送信しているデータの種類は、ドロップダウンからのcontent-typeヘッダーを使って、設定できます。

バイナリは、テキスト以外のデータをリクエストに添付したい場合に使用できます。ビデオ/オーディオファイル、画像、またはその他のバイナリデータファイル。

詳しくはこのリンクを参照してください。 HTML文書内のフォーム

185
Basant Singh

これはよりよく説明します: Postmanのドキュメント

リクエストボディ

リクエストを構築している間は、リクエストボディエディタをよく扱うことになります。 Postmanでは、ほとんどすべての種類のHTTP要求を送信できます(送信できない場合は、お知らせください)。ボディエディタは4つの領域に分かれており、ボディタイプに応じてさまざまなコントロールがあります。

フォームデータ

multipart/form-dataは、Webフォームがデータ転送に使用するデフォルトのエンコーディングです。 これはWebサイト上のフォームへの記入と送信をシミュレートします。フォームデータエディタを使用すると、データにキーと値のペアを(キーと値のエディタを使用して)設定できます。ファイルをキーに添付することもできます。 HTML 5仕様の制限により、ファイルは履歴や​​コレクションに保存されないことに注意してください。要求を送信するときにファイルをもう一度選択する必要があります。

uRLエンコード

このエンコーディングは、URLパラメータで使用されているものと同じです。キーと値のペアを入力するだけで、Postmanがキーと値を正しくエンコードします。このエンコードモードではファイルをアップロードできません。 form-dataとurlencodedの間には混乱があるかもしれませんので、必ず最初にあなたのAPIに確認してください。

生の要求には何でも含めることができます。 Postmanは、環境変数を置き換える以外は、生のエディタに入力された文字列に触れません。あなたがテキスト領域に置いたものは何でも要求と共に送られます。生のエディタを使用すると、生の本体と一緒に送信する必要があります正しいヘッダーと共にフォーマットの種類を設定できます。手動でContent-Typeヘッダーを設定することもできます。通常は、ここにXMLまたはJSONデータを送信します。

バイナリ

バイナリデータを使用すると、Postmanに入力できないものを送信できます。たとえば、画像、音声、ビデオファイルなどです。テキストファイルも送信できます。 form-dataセクションで前述したように、履歴またはコレクションを通してリクエストをロードしている場合は、ファイルを再アタッチする必要があります。

UPDATE

VKK で指摘されているように、 WHATWG仕様 はurlencodedはフォームのデフォルトのエンコーディングタイプ.

これらの属性の無効な値のデフォルトはapplication/x-www-form-urlencoded状態です。 enctype属性の欠損値のデフォルトは、application/x-www-form-urlencoded状態でもあります。

79
avck

multipart/form-data

注意。下位互換性の問題、 "multipart/form-data"と他のコンテンツタイプとの関係、パフォーマンスの問題など、ファイルのアップロードに関する追加情報については、 RFC2388 を参照してください。など.

フォームのセキュリティ問題については、付録を参照してください。

コンテンツタイプ "application/x-www-form-urlencoded"は、ASCII以外の文字を含む大量のバイナリデータまたはテキストを送信するには非効率的です。コンテンツタイプ "multipart/form-data"は、ファイル、非ASCIIデータ、およびバイナリデータを含むフォームを送信するために使用する必要があります。

コンテンツタイプ "multipart/form-data"は、 RFC2045 で概説されているように、すべてのマルチパートMIMEデータストリームの規則に従います。 "multipart/form-data"の定義は[IANA]レジストリにあります。

"multipart/form-data"メッセージは一連のパートを含み、それぞれが成功したコントロールを表します。対応するコントロールがドキュメントストリームに表示されるのと同じ順序でパーツが処理エージェントに送信されます。部品の境界はどのデータにも含めるべきではありません。これがどのように行われるかは、この仕様の範囲外です。

すべてのマルチパートMIMEタイプと同様に、各パートにはオプションの "Content-Type"ヘッダーがあり、デフォルトは "text/plain"です。ユーザーエージェントは、 "charset"パラメータを伴って "Content-Type"ヘッダを供給するべきです。

application/x-www-form-urlencoded

これがデフォルトのコンテンツタイプです。このコンテンツタイプで送信されたフォームは、次のようにエンコードする必要があります。

コントロール名と値はエスケープされます。スペース文字は、パーセント記号とその文字のASCIIコードを表す2桁の16進数字である+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by%HH 'に置き換えられます。改行は "CR LF"の組として表現されます(つまり、%0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by = 'と名前/値の組は互いに&で区切られます。

application/x-www-form-urlencodedサーバーに送信されるHTTPメッセージの本文は基本的に1つの巨大なクエリ文字列です。名前と値のペアはアンパサンド(&)で区切られ、名前は値と等号(=)で区切られます。この例は次のようになります。

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

コンテンツタイプ "application/x-www-form-urlencoded"は、大量のバイナリデータやASCII以外の文字を含むテキストを送信するには非効率的です。コンテンツタイプ "multipart/form-data"は、ファイル、非ASCIIデータ、およびバイナリデータを含むフォームを送信するために使用する必要があります。

18

Postmanがリクエストで渡す生のテキストを見るための補足的な例をいくつか示します。これはPostmanコンソールを開くことで確認できます。

enter image description here

フォームデータ

ヘッダ

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

key1=value1key2=value2

x-www-form-urlencoded

ヘッダ

Content-Type: application/x-www-form-urlencoded

key1=value1&key2=value2

生のテキスト/プレーン

ヘッダ

Content-Type: text/plain

This is some text.

生のjson

ヘッダ

Content-Type: application/json

{"key1":"value1","key2":"value2"}
2
Suragch