Wat is het juiste JSON inhoudstype?

Ik'ben al een tijdje aan het rommelen met JSON, door het gewoon als tekst naar buiten te duwen en het heeft nog niemand kwaad gedaan (voor zover ik weet), maar ik'zou graag beginnen om de dingen goed te doen.

Ik heb zoveel vermeende "standaarden" gezien voor het JSON inhoudstype:

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

Maar welke is juist, of de beste? Ik heb begrepen dat er problemen zijn met de veiligheid en de browserondersteuning.

Ik weet dat er een soortgelijke vraag is, Welk MIME type als JSON wordt geretourneerd door een REST API?, maar ik'zou graag een iets gerichter antwoord willen.

Oplossing

Voor JSON tekst:

application/json

Het MIME media type voor JSON tekst is application/json. De standaard encoding is UTF-8. (Bron: RFC 4627).

Voor JSONP (runnable javascript) met callback:

application/javascript

Hier zijn enkele blog posts die genoemd werden in de commentaren die relevant zijn.

Commentaren (8)

Natuurlijk, het juiste MIME media type voor JSON is application/json, maar het'is noodzakelijk om te beseffen welk type gegevens wordt verwacht in uw toepassing.

Ik gebruik bijvoorbeeld Ext GWT en de server response moet gaan als text/html maar bevat JSON data.

Client side, Ext GWT form listener

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");
    }
});

In het geval van het gebruik van application/json response type, suggereert de browser mij om het bestand op te slaan.

Server side source code snippet using 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);
    }
};
Commentaren (1)

Als je ASP.NET Web Services aanroept vanaf de client-side moet je application/json gebruiken om het te laten werken. Ik geloof dat dit hetzelfde is voor de jQuery en Ext frameworks.

Commentaren (2)