6849 votos

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

He estado jugando con JSON durante algún tiempo, simplemente pusheando hacia fuera como texto y sin lastimar a nadie (que yo sepa), pero me gustaría empezar a hacer las cosas correctamente.

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

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

Pero cual es el correcto, o el mejor? Deduzco que las diferencias son la seguridad y la compatibilidad del navegador.

Yo sé que hay una pregunta similar, ¿Qué tipo MIME si JSON es devuelto por una API REST?, pero me gustaría una respuesta más específica.

7169voto

Gumbo Puntos 279147

Para texto JSON:

El tipo de medio MIME para texto JSON es application/json. El encoding predeterminado es UTF-8. (Fuente: RFC 4627).

Para JSONP con devolución de llamada:

text/javascript

Aquí hay algunos blogs que se han mencionado en los comentarios que son relevantes.

1083voto

gnrfan Puntos 7647

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

Cuando se le preguntó acerca de por qué no text/json, Crockford parece haber dicho JSON es realmente no JavaScript, ni el texto y también de la IANA que era más probable para repartir application/* de text/*.

Más recursos:

516voto

Alix Axel Puntos 63455

Para JSON:

Content-Type: application/json

Para JSON-P:

Content-Type: application/javascript

432voto

Mikhail.Mamaev Puntos 3420

Por supuesto, el correcto MIME tipo de medios para JSON es application/json, pero es necesario darse cuenta de qué tipo de datos que 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.

Lado del cliente, Ext GWT forma de escucha

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 el caso de utilizar application/json de respuesta tipo, el navegador me sugiere guardar el archivo.

El lado del servidor de origen fragmento de código utilizando 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);
    }
};

282voto

Gourneau Puntos 4153

Si estás usando Ubuntu o Debian, y servir .json archivos a través de Apache, puede que desee servir los archivos con el tipo de contenido correcto. Estoy haciendo esto principalmente porque quiero usar la extensión de Firefox JSONView

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

application/json json

A continuación, reinicie el servidor Apache:

sudo service apache2 restart

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: