2010-11-22 24 views
20

Sólo quería una aclaración de los tipos de contenido formulario:Tipo de contenido de formulario para un HTTP POST json?

  1. application/x-www-form-urlencoded: Aquí es donde usted puede enviar params codificados con la url.

  2. multipart/form-data: ??

que tenga que enviar un JSON en el correo (por lo que tendría el tipo: text/x-json, supongo). Entonces la pregunta es, ¿es multipart/form-data adecuado para este propósito/es application/x-www-form-urlencoded mejor?

Además, sería posible enviar algunos parametros codificados en la URL, y algunos datos de la JSON?

Respuesta

3
multipart/form-data 

se utiliza cuando desea cargar archivos en el servidor. Por favor, consulte this article para más detalles.

+0

He leído ese artículo, pero no indicó que multipart/form-data es solo para subir archivos. ¿Es ese el caso en la práctica, sin embargo? – rmk

+1

Sí. El uso más común es cargar archivos en el servidor, incluso si solo se incluyó en la especificación para empaquetar contenido para enviar en varias secciones de un documento multiforme. Si vas al artículo y encuentras la palabra "multiparte", leerás: '[...] El valor predeterminado para este atributo es" application/x-www-form-urlencoded ". El valor "multipart/form-data" debe usarse en combinación con el elemento INPUT, type = "file" .' – Lorenzo

+1

Si todo lo que se envía es un único documento json, a veces es mejor usar 'application/json', it toma un poco de trabajo conseguir que los clientes y servidores estándar usen cualquier cosa que no sea 'multipart/form-data' y' application/x-www-form-encoded' pero al hacerlo todavía está completamente dentro de los estándares. –

5

Me he preguntado lo mismo. Básicamente parece que la especificación html tiene diferentes tipos de contenido para html y datos de formulario. Json solo tiene un único tipo de contenido.

De acuerdo con la especificación, un poste de datos JSON debe tener el tipo de contenido:
application/json

porción relevante del HTML spec

tipos

6,7 de contenido (tipos MIME)

... Ejemplos de tipos de contenido incluyen "text/html", "image/png", "image/gif", "video/mpeg", "text/css", y "audio/básica".

17.13.4 Tipos de contenido de formulario
...
application/x-www-form-urlencoded
Este es el tipo de contenido predeterminado. Los formularios enviados con este tipo de contenido deben ser codificados de la siguiente

porción relevante del JSON spec

  1. Consideraciones IANA
    El tipo de medio MIME para el texto JSON es application/json.
+0

¿Esto es una respuesta o una pregunta? – Trix

22

Parece que la gente responde a la primera parte de su pregunta (aplicación de uso/JSON).

Para la segunda parte: es perfectamente legal enviar parámetros de consulta en una solicitud HTTP POST.

Ejemplo:

POST /members?id=1234 HTTP/1.1 
Host: www.example.com 
Content-Type: application/json 

{"email":"[email protected]"} 

parámetros de consulta se utilizan comúnmente en una solicitud POST para referirse a un recurso existente. El ejemplo anterior actualizaría la dirección de correo electrónico de un miembro existente con el ID de 1234.

+0

La solicitud POST de ejemplo es perfectamente legal, pero más difícil de soportar de lo que debería (porque las personas que escriben servidores HTTP esperan que HTTP POST siempre sea uno de 'application/x-www-form-encoded' o' multipart/form-data ', porque hacer que los navegadores web utilicen cualquier otra cosa requiere un javascript complicado) –

+1

@JeremyList - Los servidores web no esperan que una publicación http sea uno de esos dos tipos de contenido. Esos tipos de contenido se refieren a formularios html. El tipo de datos sugerirá el tipo de contenido, por ejemplo, aplicación/json anterior. – Matt

+0

@Matt Eso es lo que deberían hacer: en la práctica, la mayoría de los servidores solo tratan cualquier cosa excepto los datos de formulario html como null. –

Cuestiones relacionadas