application / jsonとapplication / x-www-form-urlencodedの違い


回答:


187

最初のケースは、次のようにJSONデータをポストしていることをWebサーバーに通知することです。

{ Name : 'John Smith', Age: 23}

2番目のオプションは、次のようにURLのパラメーターをエンコードすることをWebサーバーに通知することです。

Name=John+Smith&Age=23

17
サーバー側にどのような影響がありますか。stackoverflowやTwitterなどのサイトがx-www-form-urlencoded投票などのAJAXリクエストに使用されているのを確認しましたJSON。返される応答はです。対称的なリクエスト/レスポンスのペア、つまり両方のJSONを使用する方が良いと思います。
ユーザー

@buffer対称的な質問に対する答えを知りたいのですが。
アダムジョンズ

1
@AdamJohns:それはまさに「なぜ」に答えるしませんが、このブログは読む価値がある:homakov.blogspot.in/2012/06/...
ユーザー

21
@buffer私の理解は、送信されるデータがより複雑で多くの階層を含む場合にcontentTypeがJSONを使用するのを助けることです。一方、エンコードされたフォームは、多くのコードなしでバックエンドで読み取ることができるURLで単純なパラメーターを送信するのに適しています。 ..これはなぜそれの理由の部分に答えると思います。
Ankit Srivastava

@Medorator遅いコメント。たとえば、オブジェクトの配列が含まれる複雑なJSONオブジェクトを送信する場合、を使用application/x-www-form-urlencodedするとサーバーが混乱し(私の場合はPoisonを使用するElixir)、オブジェクトの不適切な解析が発生します(ネストされた配列が何らかの形で変換されます)リストではなくマップへのオブジェクトの)。application/jsonこの場合、正しい選択を使用する必要があります。
xji 2018

6

webRequest.ContentType = "application / x-www-form-urlencoded";

  1. どこんアプリケーション/ x-www-form-urlencodedの名前の由来の?

    HTTP GETリクエストを送信する場合、次のようにクエリパラメータを使用できます。

    http://example.com/path/to/page?name = ferret&color = purple

    フィールドの内容はクエリ文字列としてエンコードされます。application/x-www-form- urlencoded名前は、以前のURLクエリパラメータから来るが、クエリパラメータは、どこリクエストのボディの代わりに、URLです。

    フォームデータ全体が長いクエリ文字列として送信されます。クエリ文字列には、文字で区切られた名前と値のペアが含まれます

    例:field1 = value1&field2 = value2

  2. シンプルと呼ばれるシンプルなリクエストの場合もあります- プリフライトチェックをトリガーしないでください

    単純なリクエストにはいくつかのプロパティが必要です。あなたは見ることができ、ここで詳細は。それらの1つは、単純な要求のContent-Typeヘッダーに許可されている値が3つしかないことです。

    • application / x-www-form-urlencoded
    • multipart / form-data
    • テキスト/プレーン

3.ほとんどフラットなパラメーターツリーの場合、application / x-www-form-urlencodedが試され、テストされます。

request.ContentType = "application / json; charset = utf-8";

  1. データはjson形式になります。

axiosたSuperAgent、デフォルトでJSON機関とのより人気NPM HTTPライブラリ、仕事の2。

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. "application / json" Content-Typeは、プリフライトリクエストの 1つです 。

これで、リクエストが単純なリクエストではない場合、ブラウザは元のリクエストの前にOPTIONSメソッドによって自動的にHTTPリクエストを送信して、元のリクエストを送信しても安全かどうかを確認します。問題がなければ、実際のリクエストを送信します。あなたは見ることができ、ここで詳細は。

  1. application / jsonは初心者向けです。URLエンコードされた配列は悪夢になることがあります!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.