diferencias en application / json y application / x-www-form-urlencoded

159

Cuál es la diferencia entre

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

y

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

Prithvi Raj Nandiwal
fuente

Respuestas:

187

El primer caso es decirle al servidor web que está publicando datos JSON como en:

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

La segunda opción es decirle al servidor web que codificará los parámetros en la URL como en:

Name=John+Smith&Age=23
Ícaro
fuente
17
¿Qué implicaciones tiene en el lado del servidor? Veo sitios como stackoverflow y uso de Twitter x-www-form-urlencodedpara solicitudes AJAX como voto, etc. La respuesta enviada de vuelta es JSON. Creo que es mejor tener un par simétrico de solicitud / respuesta, es decir, ambos JSON.
usuario
@buffer También tengo curiosidad por saber la respuesta a tu pregunta simétrica.
Adam Johns
1
@AdamJohns: Vale la pena leer este blog, aunque no responde exactamente el "por qué": homakov.blogspot.in/2012/06/…
usuario
21
@buffer Entiendo que usar JSON como contentType ayuda cuando los datos que se envían son más complejos e implican mucha jerarquía ... mientras que el formulario codificado es bueno para enviar parámetros simples en la URL que se pueden leer en el backend sin demasiado código. .. Supongo que esto responde por qué parte de eso.
Ankit Srivastava
@Medorator Un comentario tardío. Aunque, por ejemplo, cuando envía un objeto JSON complejo con una matriz de objetos en él, el uso application/x-www-form-urlencodedconfundiría al servidor (Elixir usando Poison en mi caso) y daría lugar a un análisis inapropiado del objeto (de alguna manera convirtió la matriz anidada de objetos a un mapa, en lugar de una lista). Usar application/jsondebería ser la opción correcta en este caso.
xji
6

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

  1. Donde hace viene el nombre de application / x-www-form-urlencoded ?

    Si envía HTTP GET solicitud , puede usar los parámetros de consulta de la siguiente manera:

    http://example.com/path/to/page? name = hurón & color = violeta

    El contenido de los campos está codificado como una cadena de consulta. losapplication/x-www-form- urlencoded nombre del 's proviene del parámetro de consulta de url anterior, pero los parámetros de consulta están en el cuerpo de la solicitud en lugar de la url.

    Todos los datos del formulario se envían como una cadena de consulta larga. La cadena de consulta contiene pares de nombre-valor separados por & carácter

    por ejemplo, campo1 = valor1 y campo2 = valor2

  2. Puede ser simple solicitud llamada simple - no active una verificación previa

    La solicitud simple debe tener algunas propiedades. Puedes mirar aquí para más información. Una de ellas es que solo hay tres valores permitidos para el encabezado Content-Type para solicitudes simples

    • application / x-www-form-urlencoded
    • multipart / form-data
    • Texto sin formato

3.Para árboles paramáticos en su mayoría planos, se prueba y prueba application / x-www-form-urlencoded

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

  1. Los datos serán en formato json .

axios y superagent , dos de las bibliotecas HTTP npm más populares, funcionan con cuerpos JSON de forma predeterminada.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. El tipo de contenido "application / json" es una de las solicitudes con verificación previa .

Ahora, si la solicitud no es simple , el navegador envía automáticamente una solicitud HTTP antes que la original por el método OPTIONS para verificar si es seguro enviar la solicitud original. Si está bien, envíe una solicitud real. Puedes mirar aquí para más información.

  1. application / json es amigable para principiantes. ¡Las matrices codificadas de URL pueden ser una pesadilla!
fgul
fuente