Question Quel est le type de contenu JSON correct?


J'ai joué avec JSON pendant un certain temps, je l'ai poussé comme du texte et cela n'a fait de mal à personne (que je sache), mais j'aimerais commencer à faire les choses correctement.

J'ai vu alors de nombreuses "normes" pour le type de contenu JSON:

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

Mais qu'est-ce qui est correct, ou le meilleur? Je comprends qu'il existe des problèmes de sécurité et de support de navigateur variant entre eux.

Je sais qu'il y a une question similaire, Quel type MIME si JSON est renvoyé par une API REST?, mais j'aimerais une réponse un peu plus ciblée.


9191
2018-01-25 15:25


origine


Réponses:


Pour le texte JSON:

application/json

Le type de média MIME pour le texte JSON est application/json. L'encodage par défaut est UTF-8. (La source: RFC 4627).

Pour JSONP (javascript runnable) avec rappel:

application/javascript

Voici quelques articles de blog mentionnés dans les commentaires pertinents.


9162
2018-01-25 15:27



IANA a enregistré le type MIME officiel pour JSON application/json.

Lorsqu'on lui demande pourquoi pas text/json, Crockford semble avoir dit que JSON n'est pas vraiment du JavaScript ni du texte et que l'IANA était plus susceptible de distribuer application/* que text/*.

Davantage de ressources:


1472
2018-04-07 04:32



Pour JSON:

Content-Type: application/json

Pour JSON-P:

Content-Type: application/javascript

785
2018-06-20 03:10



Bien sûr, le type de média MIME correct pour JSON est application/json, mais il est nécessaire de réaliser quel type de données est attendu dans votre application.

Par exemple, j'utilise Ext GWT et la réponse du serveur doit aller comme text / html mais contient des données JSON.

Côté client, écouteur de formulaire Ext GWT

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 cas d'utilisation application / json type de réponse, le navigateur me suggère de sauvegarder le fichier.

Extrait de code source côté serveur à l'aide de 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 réponse est une donnée générée dynamiquement, en fonction des paramètres de requête transmis dans l'URL.

Exemple:

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

Type de contenu:  application/json


JSON-P:

JSON avec remplissage. La réponse est une donnée JSON, avec un appel de fonction qui l'entoure.

Exemple:

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

Type de contenu:  application/javascript


427
2018-03-28 07:54



Si vous utilisez Ubuntu ou Debian et que vous servez des fichiers .json via Apache, vous pouvez utiliser les fichiers avec le bon type de contenu. Je le fais principalement parce que je veux utiliser l'extension Firefox JSONView

Le module Apache mod_mime aidera à le faire facilement. Cependant, avec Ubuntu, vous devez éditer le fichier /etc/mime.types et ajoutez la ligne

application/json json

Puis redémarrez Apache:

sudo service apache2 restart

372
2017-11-16 22:58



Si vous appelez les services Web ASP.NET du côté client, vous devez utiliser application/json pour que ça marche. Je crois que c'est la même chose pour le jQuery et Ext cadres.


361
2018-01-25 15:31



Le bon type de contenu pour JSON est application/jsonSAUF SI vous utilisez JSONP, également connu sous le nom JSON avec Padding, qui est en fait JavaScript et donc le bon type de contenu serait application/javascript.


287
2018-04-12 04:00



Ça ne fait aucun doute que application/json est le meilleur MIME tapez pour une réponse JSON.

Mais j'avais de l'expérience là où je devais utiliser application/x-javascript à cause de certains problèmes de compression. Mon environnement d'hébergement est l'hébergement partagé avec Allez papa. Ils ne me permettent pas de changer les configurations du serveur. J'avais ajouté le code suivant à mon web.config fichier pour compresser les réponses.

<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"/>

En utilisant cela, les pages .aspx étaient compressées avec g-zip mais les réponses JSON ne l'étaient pas. J'ai ajouté

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

dans les sections types statiques et dynamiques. Mais cela ne compresse pas du tout les réponses JSON.

Après cela, j'ai supprimé ce type nouvellement ajouté et ajouté

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

dans les deux types de sections statiques et dynamiques, et changé le type de réponse dans

.ashx (gestionnaire asynchrone) à

application/x-javascript

Et maintenant, j'ai trouvé que mes réponses JSON étaient compressées avec g-zip. Donc, je recommande personnellement d'utiliser

application/x-javascript

seulement si vous voulez compresser vos réponses JSON sur un environnement d'hébergement partagé. Parce que dans l'hébergement partagé, ils ne vous permettent pas de changer IIS configurations.


277
2018-04-18 08:22



Seulement en utilisant application/json comme le MIME tapez J'ai ce qui suit (à partir de Novembre 2011 avec les versions les plus récentes de Chrome, Firefox avec Pyromane):

  • Plus d'avertissement de Chrome lorsque le JSON est chargé depuis le serveur.
  • Firebug va ajouter un onglet à la réponse vous montrant les données JSON formaté. Si le type MIME est différent, il apparaîtra juste comme "Contenu de la réponse".

252
2017-11-30 06:42