He estado jugando con JSON durante algún tiempo, simplemente lo eliminé como texto y no ha lastimado a nadie (que yo sepa), pero me gustaría comenzar a hacer las cosas correctamente.
He visto así que muchos supuestos "normas" para el tipo de contenido JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
¿Pero cuál es la correcta o la mejor? Entiendo que hay problemas de seguridad y soporte del navegador que varían entre ellos.
Sé que hay una pregunta similar, ¿qué tipo MIME si JSON está siendo devuelto por una API REST? , pero me gustaría una respuesta un poco más específica.
IANA ha registrado el tipo oficial MIME para JSON como
application/json
.Cuando se le preguntó por qué no
text/json
, Crockford parece haber dicho que JSON no es realmente JavaScript ni texto y que IANA tenía más probabilidades de entregarapplication/*
quetext/*
.Más recursos:
fuente
text/*
sección en los primeros días que probablemente se incluirían en laapplication/*
sección en estos días.cat file.jpg
por ejemplo. Mientras que cualquier archivo xml o json es 100% imprimible. Así que creo que el punto de Stijn de Witt es válido, a pesar de que sí, es demasiado tarde para cambiar ahora.x
carácter en minúscula . No 78. JSON es texto exactamente de la misma manera que HTML (text / html). Contiene solo caracteres de texto legibles, con un significado estructurado en ellos.Para JSON:
Para JSON-P :
fuente
Por supuesto, el tipo de medio MIME correcto para JSON es
application/json
, pero es necesario darse cuenta de qué tipo de datos se espera en su aplicación.Por ejemplo, uso Ext GWT y la respuesta del servidor debe ir como texto / html pero contiene datos JSON.
Lado del cliente, oyente de formulario Ext GWT
En caso de utilizar el tipo de respuesta application / json , el navegador me sugiere guardar el archivo.
Fragmento de código fuente del lado del servidor con Spring MVC
fuente
JSON
La respuesta son datos generados dinámicamente, de acuerdo con los parámetros de consulta pasados en la URL.
Ejemplo:
Tipo de contenido:
application/json
JSON-P:
JSON con relleno. La respuesta son datos JSON, con una llamada de función envuelta alrededor.
Ejemplo:
Tipo de contenido:
application/javascript
fuente
Si está utilizando Ubuntu o Debian y sirve archivos .json a través de Apache, es posible que desee servir los archivos con el tipo de contenido correcto. Estoy haciendo esto principalmente porque quiero usar la extensión JSONView de Firefox
El módulo Apache mod_mime ayudará a hacer esto fácilmente. Sin embargo, con Ubuntu necesita editar el archivo /etc/mime.types y agregar la línea
Luego reinicie Apache:
fuente
Si llama a los servicios web ASP.NET desde el lado del cliente, debe usarlo
application/json
para que funcione. Creo que esto es lo mismo para los marcos jQuery y Ext .fuente
content-Type: text/plain
,content-Type: application/json
,content-Type: application/json; charset=UTF-8
,contentType: "application/x-www-form-urlencoded; charset=UTF-8"
El tipo de contenido correcto para JSON es A
application/json
MENOS que esté utilizando JSONP , también conocido como JSON con relleno, que en realidad es JavaScript, por lo que sería el tipo de contenido correctoapplication/javascript
.fuente
No hay duda de que
application/json
es el mejor tipo MIME para una respuesta JSON.Pero tenía algo de experiencia donde tuve que usar
application/x-javascript
debido a algunos problemas de compresión. Mi entorno de alojamiento es alojamiento compartido con GoDaddy . No me permiten cambiar las configuraciones del servidor. Agregué el siguiente código a miweb.config
archivo para comprimir las respuestas.Al usar esto, las páginas .aspx se comprimieron con g-zip pero las respuestas JSON no. yo añadí
en las secciones de tipos estáticos y dinámicos. Pero esto no comprime las respuestas JSON en absoluto.
Después de eso, eliminé este tipo recién agregado y agregué
en las secciones de tipos estático y dinámico, y cambió el tipo de respuesta en
.ashx (controlador asíncrono) a
Y ahora descubrí que mis respuestas JSON estaban comprimidas con g-zip. Así que personalmente recomiendo usar
solo si desea comprimir sus respuestas JSON en un entorno de alojamiento compartido . Porque en el alojamiento compartido, no le permiten cambiar las configuraciones de IIS .
fuente
application/json
, lo aprovecho en mi alojamiento compartido y no sugeriría usar un tipo de contenido diferente para habilitar la compresión de todos modos, es simplemente incorrecto. Se puede hacer, pero aún estará mal. Usar diferentes tipos de contenido para el soporte del navegador es una cosa, usar diferentes tipos de contenido para la compresión del lado del servidor es otra.Solo cuando lo uso
application/json
como tipo MIME tengo lo siguiente (a partir de noviembre de 2011 con las versiones más recientes de Chrome, Firefox con Firebug ):fuente
No todo funciona para el tipo de contenido
application/json
.Si está utilizando Ext JS form submit to upload file, tenga en cuenta que el navegador analiza la respuesta del servidor para crear el documento para el
<iframe>
.Si el servidor está utilizando JSON para enviar el objeto devuelto, entonces el
Content-Type
encabezado debe estar configuradotext/html
para indicarle al navegador que inserte el texto sin cambios en el cuerpo del documento.Consulte la documentación de la API Ext JS 3.4.0 .
fuente
application/json
por espec.iframe
parece incendiosload
caso deapplication/javascript
,application/x-javascript
,text/javascript
,text/plain
, pero no disparando porapplication/json
nitext/html
. A partir de hoy, Android <= 2.3 es aproximadamente el 50% de la cuota de mercado de Android.JSON es un lenguaje específico de dominio (DSL) y un formato de datos independiente de JavaScript, y como tal tiene su propia MIME tipo,
application/json
. El respeto por los tipos MIME está, por supuesto, impulsado por el cliente, por lo quetext/plain
puede hacerlo por la transferencia de bytes, pero entonces estaría impulsando la interpretación al dominio de la aplicación del proveedor innecesariamenteapplication/json
. ¿Transferirías XML a través detext/plain
?Pero honestamente, su elección del tipo MIME es un consejo para el cliente sobre cómo interpretar los datos,
text/plain
otext/HTML
(cuando no es HTML) es como borrar el tipo, es tan poco informativo como hacer que todos sus objetos de tipo Objeto en un lenguaje escrito.Ningún tiempo de ejecución del navegador que conozca tomará un documento JSON y lo pondrá automáticamente a disposición como un objeto accesible a JavaScript sin intervención, pero si está trabajando con un cliente paralítico, es un asunto completamente diferente. Pero esa no es toda la historia: los servicios RESTful JSON a menudo no tienen tiempos de ejecución de JavaScript, pero no les impide usar JSON como un formato de intercambio de datos viable. Si los clientes están paralizados ... entonces consideraría quizás la inyección de HTML a través de un servicio de plantillas de Ajax .
Aplicación / JSON!
fuente
Si se encuentra en un entorno del lado del cliente, es obligatorio investigar sobre la compatibilidad entre navegadores para una aplicación web bien compatible.
El tipo de contenido HTTP correcto sería
application/json
, como otros ya están resaltados también, pero algunos clientes no lo manejan muy bien, por eso jQuery recomienda el valor predeterminadotext/html
.fuente
La respuesta correcta es:
fuente
Como muchos otros han mencionado,
application/json
es la respuesta correcta.Pero lo que aún no se ha explicado es lo que significan las otras opciones que propuso.
application/x-javascript
: El tipo MIME experimental para JavaScript antesapplication/javascript
se hizo estándar.text/javascript
: Ahora obsoleto. Debe usarapplication/javascript
cuando use javascript.text/x-javascript
: Tipo MIME experimental para la situación anterior.text/x-json
: Tipo MIME experimental para JSON antes deapplication/json
registrarse oficialmente.En general, siempre que tenga dudas sobre los tipos de contenido, debe consultar este enlace
fuente
text/javascript
obsoleto? Todavía estoy llenando documentos HTML con<script type="text/javascript" ...
etiquetas.type="text/javascript"
y solo hacer<script>...</script>
al menos según HTML5.En JSP , puede usar esto en la directiva de página:
El tipo de medio MIME correcto para JSON es
application/json
. JSP lo usará para enviar una respuesta al cliente.fuente
"
application/json
" Es el tipo de contenido JSON correcto.fuente
El registro de IANA para
application/json
diceNotarás que IANA.org no enumera ninguno de estos otros tipos de medios , de hecho, incluso
application/javascript
ahora está obsoleto. Entonces,application/json
realmente es la única respuesta correcta posible .El soporte del navegador es otra cosa.
Los tipos de medios no estándar más ampliamente admitidos son
text/json
otext/javascript
. Pero incluso algunos grandes nombres usantext/plain
.Aún más extraño es el encabezado Content-Type enviado por Flickr, que devuelve JSON como
text/xml
. Google usatext/javascript
para algunos de sus apis ajax.Ejemplos:
Salida:
Content-Type: text/javascript
Salida:
Content-Type: text/xml
fuente
El tipo MIME correcto es
application/json
PERO
Experimenté muchas situaciones en las que el tipo de navegador o el usuario del framework necesitaban:
fuente
Yo uso el siguiente
fuente
El encabezado Content-Type debe establecerse en ' application / json ' al publicar. El servidor que escucha la solicitud debe incluir " Aceptar = aplicación / json ". En Spring MVC puedes hacerlo así:
Agregue encabezados a la respuesta:
fuente
En Spring tiene un tipo definido:
MediaType.APPLICATION_JSON_VALUE
que es equivalente a application / json .fuente
Utilizo este código para poner datos en JSON en Google Cloud Storage (GCS), que se puede ver públicamente :
Para recuperar los datos es sencillo:
fuente
Si el JSON está con relleno, entonces lo estará
application/jsonp
. Si el JSON no tiene relleno, entonces lo seráapplication/json
.Para lidiar con ambos, es una buena práctica usar: 'application / javascript' sin molestar si es con relleno o sin relleno.
fuente
Para JSON, estoy usando:
Esto se describe en la propuesta del Formato de intercambio de datos JSON 7158 del IETF, Sección 1.2: Especificaciones de JSON .
fuente
Ampliando las respuestas aceptadas, cuando está utilizando JSON en un contexto REST ...
Existe un fuerte argumento sobre el uso
application/x-resource+json
yapplication/x-collection+json
cuando representa recursos y colecciones REST.Y si decide seguir la especificación jsonapi , debe usarla
application/vnd.api+json
, como está documentado.Aunque no existe un estándar universal, está claro que la semántica agregada a los recursos que se transfieren justifica un tipo de contenido más explícito que simplemente
application/json
.Siguiendo este razonamiento, otros contextos podrían justificar un tipo de contenido más específico .
fuente
application/vnd.api+json
parece ser específicamente para apis que usan json: api , una especificación muy estrecha con sus propias expectativas y formato, no entiendo que sea para ninguna API que devuelva json. Por favorLos desarrolladores de PHP usan esto:
fuente
Si obtiene datos de la API REST en JSON, debe usar el tipo de contenido
fuente
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- javascriptContent-Type: text/javascript
- javascript PERO obsoleto, las versiones anteriores de IE solían usarse como atributo html.Content-Type: text/x-javascript
- Tipos de medios JavaScript PERO obsoletosContent-Type: text/x-json
- json antes de que la aplicación / json se registrara oficialmente.fuente
JSON (notación de objetos JavaScript) y JSONP formatos ("JSON with padding") parecen ser muy similares y, por lo tanto, puede ser muy confuso qué tipo de MIME deberían usar. Aunque los formatos son similares, existen algunas diferencias sutiles entre ellos.
Entonces, cuando tengo dudas, tengo un enfoque muy simple (que funciona perfectamente bien en la mayoría de los casos), es decir, ir y verificar el documento RFC correspondiente.
JSON RFC 4627 (La aplicación / json Media Type para JavaScript Object Notation (JSON)) es una especificación del formato JSON. En la sección 6 dice que el tipo de medio MIME para el texto JSON es
JSONP JSONP ("JSON con relleno") se maneja de manera diferente que JSON, en un navegador. JSONP se trata como un script JavaScript normal y, por lo tanto, debe usar
application/javascript,
el tipo MIME oficial actual para JavaScript. Sin embargo, en muchos casos, eltext/javascript
tipo MIME también funcionará bien.Tenga en cuenta que
text/javascript
ha sido marcado como obsoleto por el documento RFC 4329 (Tipos de medios de secuencias de comandos) y se recomienda utilizar elapplication/javascript
tipo en su lugar. Sin embargo, debido a razones heredadas,text/javascript
todavía se usa ampliamente y tiene soporte para navegadores cruzados (que no siempre es un caso con elapplication/javascript
tipo MIME, especialmente con navegadores más antiguos).fuente