diferenças em application / json e application / x-www-form-urlencoded

159

Qual é a diferença entre

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

e

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

Prithvi Raj Nandiwal
fonte

Respostas:

187

O primeiro caso é informar ao servidor da web que você está postando dados JSON como em:

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

A segunda opção é informar ao servidor da web que você codificará os parâmetros no URL como em:

Name=John+Smith&Age=23
Icaro
fonte
17
Que implicações isso tem no lado do servidor. Eu vejo sites como o stackoverflow e o Twitter usados x-www-form-urlencodedpara solicitações AJAX como votação etc. A resposta é enviada de volta JSON. Eu acho que é melhor ter um par simétrico de solicitação / resposta, ou seja, ambos JSON.
usuário
@buffer Também estou curioso para saber a resposta para sua pergunta simétrica.
Adam Johns
1
@AdamJohns: Vale a pena ler este blog, embora não responda exatamente o "porquê": homakov.blogspot.in/2012/06/…
user
21
@buffer Meu entendimento é usar o JSON como o contentType ajuda quando os dados a serem enviados são mais complexos e envolvem muita hierarquia .. enquanto o formulário codificado é bom para enviar parâmetros simples em url que podem ser lidos no backend sem muito código. .. Eu acho que isso responde a parte do porquê.
Ankit Srivastava
@Medorator Um comentário tardio. Embora, por exemplo, quando você esteja enviando um objeto JSON complexo com uma variedade de objetos, o uso application/x-www-form-urlencodedconfundiria o servidor (Elixir usando Poison no meu caso) e resultaria em uma análise inadequada do objeto (de alguma forma, converteu a matriz aninhada de objetos para um mapa, em vez de uma lista). O uso application/jsondeve ser a escolha correta neste caso.
Xji #
6

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

  1. De onde vem o nome do aplicativo / x-www-form-urlencoded ?

    Se você enviar uma solicitação HTTP GET , poderá usar os parâmetros de consulta da seguinte maneira:

    http://example.com/path/to/pagenome = furão & cor = roxo

    O conteúdo dos campos é codificado como uma sequência de consultas. O application/x-www-form- urlencodednome vem do parâmetro de consulta de URL anterior, mas os parâmetros de consulta estão onde o corpo da solicitação e não o URL.

    Os dados inteiros do formulário são enviados como uma sequência de consultas longa. A sequência de consultas contém pares nome-valor separados por & caractere

    por exemplo, campo1 = valor1 & campo2 = valor2

  2. Pode ser uma solicitação simples chamada simples - não acione uma verificação de comprovação

    A solicitação simples deve ter algumas propriedades. Você pode procurar aqui para mais informações. Uma delas é que existem apenas três valores permitidos para o cabeçalho Content-Type para solicitações simples

    • application / x-www-form-urlencoded
    • multipart / form-data
    • texto / simples

3.Para árvores de parâmetros principalmente planas, application / x-www-form-urlencoded é testado e testado.

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

  1. Os dados serão no formato json .

axios e superagent , duas das bibliotecas HTTP npm mais populares, funcionam com corpos JSON por padrão.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. O tipo de conteúdo "application / json" é uma das solicitações comprovadas .

Agora, se a solicitação não for simples , o navegador envia automaticamente uma solicitação HTTP antes da original pelo método OPTIONS para verificar se é seguro enviar a solicitação original. Se estiver ok, envie a solicitação real. Você pode procurar aqui para mais informações.

  1. application / json é amigável para iniciantes. Matrizes codificadas em URL podem ser um pesadelo!
fgul
fonte