¿Cuál es el tipo correcto de contenido JSON?

Pasé un tiempo jugando con JSON , simplemente escribiéndolo como texto, y no lastimó a nadie (lo que sé), pero me gustaría empezar a hacer las cosas bien.

He visto tantos supuestos "estándares" para el tipo de contenido JSON:

 application/json application/x-javascript text/javascript text/x-javascript text/x-json 

Pero, ¿qué es correcto o mejor? Entiendo que entre ellos hay problemas de seguridad y soporte de navegador.

Sé que hay una pregunta similar. ¿Cuál es el tipo MIME si la API REST devuelve JSON? Pero me gustaría una respuesta un poco más enfocada.

9470
25 янв. fijado por Oli el 25 de enero 2009-01-25 18:25 '09 a las 18:25 2009-01-25 18:25
@ 38 respuestas
  • 1
  • 2

Para texto JSON:

application/json

El tipo de medio MIME para texto JSON es application/json . La codificación predeterminada es UTF-8. (Fuente: RFC 4627 ).

Para JSONP (javascript ejecutable) con devolución de llamada:

application/javascript

Aquí hay algunas publicaciones de blog que se mencionaron en los comentarios que son relevantes para el caso.

9468
25 янв. Gumbo respondió el 25 de enero 2009-01-25 18:27 '09 a las 18:27 2009-01-25 18:27

IANA ha registrado el tipo MIME oficial para JSON como application/json .

Cuando se le preguntó acerca de por qué no text/json , Crockford parece haber dicho que JSON no es realmente JavaScript, sino texto, y es más probable que IANA apruebe application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Usando esto, las páginas .aspx fueron comprimidas con g-zip, pero las respuestas JSON no lo fueron. He añadido

 <add mimeType="application/json" enabled="true"/> 

En secciones de tipos estáticos y dinámicos. Pero esto no comprime las respuestas JSON en absoluto.

Después de eso, borré este nuevo tipo agregado y agregué

 <add mimeType="application/x-javascript" enabled="true"/> 

en secciones de tipos estáticos y dinámicos y cambió el tipo de respuesta en

.ashx (controlador asíncrono) en

 application/x-javascript 

Y ahora descubrí que mis respuestas JSON estaban comprimidas con g-zip. Por lo tanto, personalmente recomiendo usar

 application/x-javascript 

solo si desea comprimir sus respuestas JSON en un entorno de alojamiento público . Porque no le permiten cambiar las configuraciones de IIS en el alojamiento compartido.

282
18 апр. La respuesta está dada por Shashwat 18 de abril. 2012-04-18 11:22 '12 a las 11:22 2012-04-18 11:22

Solo cuando uso application/json como MIME , tengo lo siguiente (desde noviembre de 2011 con las últimas versiones de Chrome, Firefox con Firebug ):

  • No hay más advertencias de Chrome al descargar JSON desde el servidor.
  • Firebug agregará una pestaña a la respuesta que muestra los datos con formato JSON. Si el tipo MIME es diferente, se mostrará como "Contenido de respuesta".
257
30 нояб. La respuesta la da Ivo Limmen el 30 de noviembre. 2011-11-30 09:42 '11 a las 9:42 2011-11-30 09:42

No todo funciona para el tipo de contenido application/json .

Si utiliza Ext JS para enviar un archivo, tenga en cuenta que el navegador analiza la respuesta del servidor para crear un documento para el <iframe> .

Si el servidor usa JSON para enviar el objeto devuelto, entonces el encabezado Content-Type debe configurarse en text/html para indicar al navegador que inserte texto sin cambios en el cuerpo del documento.

Consulte la documentación de la API Ext JS 3.4.0 .

232
07 сент. Conan respondió el 7 de septiembre. 2011-09-07 05:41 '11 a las 5:41 am 2011-09-07 05:41

JSON es un lenguaje de dominio (DSL) y un formato de datos que es independiente de JavaScript y, como tal, tiene su propio MIME , application/json . El respeto por los tipos MIME, por supuesto, depende del cliente, por lo que text/plain puede hacer para transferir bytes, pero luego interpretará excesivamente la interpretación del dominio del proveedor de la aplicación - application/json . ¿Pasas XML a través de text/plain ?

Pero, francamente, su elección del tipo MIME es un consejo para el cliente sobre cómo interpretar los datos: text/plain o text/HTML (cuando no es HTML), como los estilos de borrado, no es informativo, como la creación de todos sus objetos en una tipografía. idioma

La falta de tiempo de ejecución del navegador, que sé que tomará un documento JSON y lo pondrá a disposición automáticamente en tiempo de ejecución como un objeto accesible a JavaScript, sin intervención, pero si está trabajando con un cliente paralizado, eso es otra cuestión. Pero esta no es toda la historia. Los servicios RESTful JSON a menudo no tienen autonomía de JavaScript, pero esto no les impide utilizar JSON como un formato de intercambio de datos viable. Si los clientes están dañados ... entonces creo que es posible que la inyección de HTML se realice utilizando una plantilla Ajax .

Aplicación / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 La respuesta la da VLostBoy el 15 de mayo de 2012 a las 1:19. 2012-05-15 01:19

Si se encuentra en un entorno del lado del cliente, se requiere una investigación de soporte en varios navegadores para una aplicación web bien soportada.

El tipo de contenido HTTP correcto será application/json , ya que otros también están asignados, pero algunos clientes no manejan esto muy bien, por lo que jQuery recomienda usar el text/html predeterminado.

201
27 апр. La respuesta la da Emanuele Del Grande el 27 de abril. 2012-04-27 19:27 '12 a las 7:27 pm 2012-04-27 19:27

La respuesta correcta es:

 Content-Type: application/json 
159
31 дек. la respuesta la da Irfan DANISH 31 dic. 2012-12-31 09:29 '13 a las 9:29 2012-12-31 09:29

Como muchos otros, application/json es la respuesta correcta.

Pero aún no se explica qué significan las otras opciones que ofrece.

  • application/x-javascript : tipo MIME experimental para JavaScript antes de la application/javascript era estándar.

  • text/javascript : ahora en desuso. Debe utilizar application/javascript cuando use javascript.

  • text/x-javascript : tipo MIME experimental para la situación anterior.

  • text/x-json : tipo MIME experimental para JSON antes de que la application/json recibiera el registro oficial.

En general, siempre que tenga dudas sobre los tipos de contenido, debe consultar este enlace.

156
02 апр. la respuesta se da fcm 02 abr 2013-04-02 14:10 '13 a las 14:10 2013-04-02 14:10

En JSP, puede usar esto en la directiva de página:

 <%@ page > 

El tipo MIME correcto para JSON es application/json . JSP lo usará para enviar una respuesta al cliente.

139
19 янв. la respuesta se da raja 19 jan. 2013-01-19 11:22 '13 a las 11:22 2013-01-19 11:22

" application/json " es el tipo correcto de contenido JSON.

 def ajaxFindSystems = { def result = Systems.list() render(contentType:'application/json') { results { result.each{sys-> system(id:sys.id, name:sys.name) } } resultset (rows:result.size()) } } 
108
26 февр. La respuesta la da Sukane el 26 de febrero. 2013-02-26 14:55 '13 a las 14:55 2013-02-26 14:55

Registro de la IANA para la application/json dice

Aplicaciones que utilizan este tipo de medio: JSON se usó para intercambiar datos entre aplicaciones escritas en todos estos lenguajes de programación: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Notará que IANA.org no enumera ninguno de estos otros tipos de medios , de hecho, incluso la application/javascript está desactualizado. Por lo tanto, application/json es realmente la única respuesta correcta.

El soporte del navegador es otra cosa.

Los tipos de medios no estándar más comunes son text/json o text/javascript . Pero algunos nombres grandes incluso usan text/plain .

Incluso más extraño es el encabezado Content-Type enviado por Flickr, que devuelve JSON como text/xml . Google usa text/javascript para algunos de ellos ajax apis.

Ejemplos:

 curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0> 

Salida: Content-Type: text/javascript

 curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo> 

Salida: Content-Type: text/xml

98
12 февр. Respuesta dada por Jhawins 12 de febrero. 2014-02-12 19:12 '14 a las 19:12 2014-02-12 19:12

El tipo correcto es MIME application/json

PERO

He experimentado muchas situaciones cuando necesito un tipo de navegador o un usuario de framework:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 La respuesta se da LombaX 03 May '13 a las 19:00 2013-05-03 19:00

Yo uso abajo

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 La respuesta fue dada por Andro el 16 de mayo de 2013 a las 15:43 2013-05-16 15:43

El encabezado del encabezado Content-Type se debe establecer en application / json cuando se publique. El servidor que escucha la solicitud debe incluir " Aceptar = aplicación / json ". En Spring MVC, puedes hacer esto de la siguiente manera:

 @RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json") 

Añadir encabezados a la respuesta:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Respuesta dada por Alexander Burakevych 09 ago. 2013-08-09 13:49 '13 a las 13:49 2013-08-09 13:49

En Spring , tienes un tipo específico: MediaType.APPLICATION_JSON_VALUE , que es equivalente a application / json.

55
29 июня '13 в 11:34 2013-06-29 11:34 Chand Priyankara da la respuesta el 29 de junio de 2013 a las 11:34 2013-06-29 11:34

application/json funciona bien en PHP para almacenar una matriz u objeto de datos.

Utilizo este código para poner datos en JSON en Google Cloud Storage (GCS) , que está disponible públicamente para su visualización :

 $context = stream_context_create([ 'gs' => [ 'acl'=>'public-read', 'Content-Type' => 'application/json', ] ]); file_put_contents( "gs://BUCKETNAME/FILENAME.json", json_encode((object) $array), false, $context ); 

Para devolver datos directamente:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. La respuesta se da Chetabahana 01 de abril. 2015-04-01 19:13 '15 a las 19:13 2015-04-01 19:13

Para JSON yo uso:

  Content-Type: application/json 

Esto se describe en la cláusula IETF JSON Data Interchange Format 7158, Sección 1.2: Especificaciones JSON .

47
06 февр. La respuesta es dada por Mehmet_ 06 Feb. 2015-02-06 15:01 '15 a las 15:01 2015-02-06 15:01

Si se rellena el JSON, será application/jsonp . Si JSON no tiene complemento, será application/json .

Para lidiar con ellos, se recomienda usar: "application / javascript", sin preocuparse de si es con o sin relleno.

47
21 июня '13 в 18:22 2013-06-21 18:22 Ankit Zalani da la respuesta el 21 de junio de '13 a 6:22 2013-06-21 18:22

Expansión de respuestas recibidas cuando usa JSON en el contexto de REST ...

Existe un fuerte argumento sobre el uso de application/x-resource+json y application/x-collection+json cuando se presentan recursos y colecciones REST.

Y si decide seguir la especificación jsonapi , debe usar application/vnd.api+json como se documenta.

Aunque no hay un estándar universal, está claro que la semántica agregada de los recursos transferidos justifica un tipo de contenido más explícito que solo application/json .

Siguiendo estas consideraciones, otros contextos podrían justificar un tipo de contenido más específico.

40
09 июня '15 в 22:12 2015-06-09 22:12 la respuesta se da jgomo3 09 de junio, '15 a las 10:12 pm 2015-06-09 22:12

Los desarrolladores de PHP usan esto:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 la respuesta la da el usuario 3087089 29 de marzo de 2014 a las 8:43 2014-03-29 08:43

Si obtiene los datos de la API REST en JSON, debe utilizar el tipo de contenido

 For JSON data: Content-Type:application/json For HTML data: Content-Type:text/html, For XHTML data: Content-Type:application/xhtml+xml, For XML data: Content-Type:text/xml, application/xml 
37
11 апр. Respuesta dada por Krishna el 11 de abril. 2016-04-11 12:15 '16 a las 12:15 pm 2016-04-11 12:15

JSON (Designación de objeto de JavaScript) y JSONP ("JSON con relleno") parecen ser muy similares, y por lo tanto puede ser muy confuso qué tipo de MIME deberían usar. Aunque los formatos parecen ser muy similares, existen algunas diferencias sutiles entre ellos.

Por lo tanto, cuando dudo, tengo un enfoque muy simple (que funciona bien en la mayoría de los casos), es decir, vaya y verifique el documento RFC correspondiente.

JSON RFC 4627 (Tipo de aplicación / json Media para designar objetos de JavaScript (JSON)) es una especificación de formato JSON. La sección 6 indica que el tipo multimedia MIME para texto JSON

 application/json. 

JSONP JSONP ("JSON con complemento") se procesa de manera diferente a JSON en el navegador. JSONP se trata como un script de JavaScript normal y, por lo tanto, debe usar application/javascript, tipo MIME oficial actual para JavaScript. En muchos casos, sin embargo, el tipo MIME de text/javascript funcionará bien.

Tenga en cuenta que el text/javascript está marcado como RFC 4329 (Tipos de medios de scripting) obsoleto, y se recomienda usar application/javascript lugar. Sin embargo, debido a razones heredadas, el text/javascript todavía se usa ampliamente y es compatible con el navegador cruzado (que no siempre es el tipo de application/javascript MIME, especialmente en los navegadores más antiguos).

23
15 февр. Respuesta dada por Iresha Rubasinghe el 15 de febrero. 2016-02-15 06:20 '16 a las 6:20 2016-02-15 06:20

Content-Type: application/json - JSON
Content-Type: application/javascript - json-P
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript, PERO desactualizado, las versiones anteriores de IE, solían usarse como atributo html
Content-Type: text/x-javascript - Tipos multimedia JavaScript, PERO obsoletos
Content-Type: text/x-json - json antes del registro oficial de la aplicación / json.

22

Otras preguntas sobre las etiquetas de o Haz una pregunta