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


He estado jugando con JSON por algún tiempo, solo lo he usado como texto y no ha lastimado a nadie (que yo sepa), pero me gustaría empezar a hacer las cosas correctamente.

he visto asi que muchos supuestos "estándares" para el tipo de contenido JSON:

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

¿Pero cuál es correcto o el mejor? Deduzco que existen problemas de seguridad y compatibilidad de navegadores 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.


9191
2018-01-25 15:25


origen


Respuestas:


Para el texto JSON:

application/json

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

por 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.


9162
2018-01-25 15:27



IANA ha registrado el tipo MIME oficial 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 repartir application/* que text/*.

Más recursos:


1472
2018-04-07 04:32



Para JSON:

Content-Type: application/json

por JSON-P:

Content-Type: application/javascript

785
2018-06-20 03:10



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, yo uso Ext. GWT y la respuesta del servidor debe ir como texto / html pero contiene datos JSON.

Del lado del cliente, Ext. GWT forma oyente

uploadForm.getForm().addListener(new FormListenerAdapter()
{
    @Override
    public void onActionFailed(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Error");
    }

    @Override
    public void onActionComplete(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Success");
    }
});

En caso de usar aplicación / json tipo de respuesta, el navegador me sugiere que guarde el archivo.

Fragmento de código fuente del lado del servidor usando Spring MVC

return new AbstractUrlBasedView() 
{
    @SuppressWarnings("unchecked")
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                                           HttpServletResponse response) throws Exception 
    {
        response.setContentType("text/html");
        response.getWriter().write(json);
    }
};

584
2017-10-07 14:35



JSON:

La respuesta es datos generados dinámicamente, de acuerdo con los parámetros de consulta pasados ​​en la URL.

Ejemplo:

{ "Name": "Foo", "Id": 1234, "Rank": 7 }

Tipo de contenido:  application/json


JSON-P:

JSON con relleno. La respuesta es datos JSON, con una llamada a la función envuelta alrededor.

Ejemplo:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

Tipo de contenido:  application/javascript


427
2018-03-28 07:54



Si está utilizando Ubuntu o Debian y sirve archivos .json a través de Apache, es posible que desee publicar los archivos con el tipo de contenido correcto. Lo hago principalmente porque quiero usar la extensión de Firefox JSONView

El módulo de Apache mod_mime ayudará a hacer esto fácilmente. Sin embargo, con Ubuntu necesitas editar el archivo /etc/mime.types y agrega la línea

application/json json

Luego reinicia Apache:

sudo service apache2 restart

372
2017-11-16 22:58



Si llamas a ASP.NET Web Services desde el lado del cliente, tienes que usar application/json para que funcione Creo que esto es lo mismo para el jQuery y Ext marcos.


361
2018-01-25 15:31



El tipo de contenido correcto para JSON es application/jsonA MENOS QUE estés usando JSONP, también conocido como JSON con relleno, que en realidad es JavaScript, por lo que el tipo de contenido correcto sería application/javascript.


287
2018-04-12 04:00



No hay duda de que application/json es la mejor MÍMICA escriba para una respuesta JSON.

Pero tenía algo de experiencia donde tenía que usar application/x-javascript debido a algunos problemas de compresión. Mi entorno de alojamiento es alojamiento compartido con Ve papi. No me permiten cambiar las configuraciones del servidor. Agregué el siguiente código a mi web.config archivo para comprimir respuestas.

<httpCompression>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Al usar esto, las páginas .aspx se comprimieron con g-zip pero las respuestas JSON no. yo añadí

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

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é

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

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

.ashx (controlador asíncrono) a

application/x-javascript

Y ahora descubrí que mis respuestas JSON estaban comprimidas con g-zip. Así que personalmente recomiendo usar

application/x-javascript

solo si quiere comprimir sus respuestas JSON en un entorno de alojamiento compartido. Porque en el alojamiento compartido, no te permiten cambiar IIS configuraciones


277
2018-04-18 08:22



Solo cuando se usa application/json como el MÍMICA tipo I tiene lo siguiente (desde noviembre de 2011 con las versiones más recientes de Chrome, Firefox con Firebug)

  • No más advertencias de Chrome cuando el JSON se carga desde el servidor.
  • Firebug agregará una pestaña a la respuesta que le muestra los datos JSON formateado. Si el tipo MIME es diferente, solo se mostrará como 'Contenido de respuesta'.

252
2017-11-30 06:42