Quel est le type de contenu JSON correct?

J'ai passé du temps à bricoler JSON , à le présenter sous forme de texte et cela ne faisait de mal à personne (ce que je sais), mais j'aimerais commencer à bien faire les choses.

J'ai vu tant de prétendus "standards" 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 juste ou meilleur? Je comprends qu’entre eux se posent des problèmes de sécurité et de support du navigateur

Je sais qu'il existe une question similaire: quel est le type MIME si JSON est renvoyé par l'API REST? mais je voudrais une réponse un peu plus ciblée.

9470
25 янв. fixé par Oli 25 janvier 2009-01-25 18:25 '09 à 18:25 2009-01-25 18:25
@ 38 réponses
  • 1
  • 2

Pour le texte JSON:

application/json

Le type de support MIME pour le texte JSON est application/json . Le codage par défaut est UTF-8. (Source: RFC 4627 ).

Pour JSONP (javascript exécutable) avec rappel:

application/javascript

Voici quelques articles de blog qui ont été mentionnés dans les commentaires qui sont pertinents à l'affaire.

9468
25 янв. Gumbo a répondu le 25 janvier 2009-01-25 18:27 '09 à 18:27 2009-01-25 18:27

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

Lorsqu'on lui a demandé pourquoi pas text/json , Crockford semble avoir déclaré que JSON n'était pas vraiment du code JavaScript, mais du texte, et que l'IANA risquait davantage de transmettre application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

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

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

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

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

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

dans des sections de types statiques et dynamiques et a changé le type de réponse dans

.ashx (gestionnaire asynchrone) sur

 application/x-javascript 

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

 application/x-javascript 

uniquement si vous souhaitez compresser vos réponses JSON dans un environnement d'hébergement public . Parce qu'ils ne vous permettent pas de modifier les configurations IIS sur l'hébergement partagé.

282
18 апр. la réponse est donnée par shashwat le 18 avril . 2012-04-18 11:22 '12 à 11:22 2012-04-18 11:22

Lorsque j'ai utilisé application/json tant que MIME , j'ai les éléments suivants (depuis novembre 2011 avec les dernières versions de Chrome, Firefox avec Firebug ):

  • Plus d'avertissements de Chrome lors du téléchargement de JSON depuis le serveur.
  • Firebug ajoutera un onglet à la réponse indiquant les données au format JSON. Si le type MIME est différent, il sera affiché comme «Contenu de la réponse».
257
30 нояб. La réponse est donnée par Ivo Limmen le 30 novembre. 2011-11-30 09:42 '11 à 9:42 2011-11-30 09:42

Tout ne fonctionne pas pour le type de contenu application/json .

Si vous utilisez Ext JS pour envoyer un fichier, n'oubliez pas que le navigateur analyse la réponse du serveur afin de créer un document pour <iframe> .

Si le serveur utilise JSON pour envoyer l'objet renvoyé, l'en Content-Type tête Content-Type doit être défini sur text/html pour indiquer au navigateur d'insérer du texte sans modification dans le corps du document.

Voir la documentation de l'API Ext JS 3.4.0 .

232
07 сент. Conan a répondu 07 septembre 2011-09-07 05:41 '11 à 5:41 am 2011-09-07 05:41

JSON est un > (DSL) et un format de données indépendants de JavaScript. Il possède donc son propre fichier MIME , application/json . Bien entendu, le respect des types MIME dépend du client. Par conséquent, text/plain peut transférer des octets, mais vous interpréterez alors inutilement l'interprétation du domaine du fournisseur de l'application, application/json . Passez-vous du XML via text/plain ?

Mais franchement, votre choix du type MIME est un conseil à donner au client sur la manière d’interpréter les données - text/plain ou text/HTML (quand ce n’est pas du HTML) - comme si vous effaciez des styles - c’est peu informatif, comme de créer tous vos objets sur un texte >

Manque de temps d'exécution du navigateur, qui, je le sais, prendra un document JSON et le mettra automatiquement à la disposition du runtime en tant qu'objet accessible en JavaScript, sans intervention de l'utilisateur, mais si vous travaillez avec un client estropié, c'est un autre problème. Mais ce n'est pas toute l'histoire. Les services JSON RESTful ne disposent souvent pas de l'autonomie JavaScript, mais cela ne les empêche pas d'utiliser JSON comme format d'échange de données viable. Si les clients sont endommagés ... alors je pense qu'il est possible que l'injection HTML soit réalisée à l'aide d'un modèle Ajax .

Application / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 la réponse est donnée par VLostBoy le 15 mai '12 à 1:19 2012-05-15 01:19

Si vous vous trouvez dans un environnement côté client, une recherche de support inter-navigateur est requise pour une application Web bien prise en charge.

Le type de contenu HTTP correct sera application/json , car d’autres sont déjà alloués, mais certains clients ne le gèrent pas très bien. JQuery recommande donc d’utiliser le text/html par défaut.

201
27 апр. La réponse est donnée par Emanuele Del Grande le 27 avril. 2012-04-27 19:27 '12 à 19h27 2012-04-27 19:27

La bonne réponse est:

 Content-Type: application/json 
159
31 дек. la réponse est donnée par Irfan DANISH 31 déc. 2012-12-31 09:29 '13 à 9:29 2012-12-31 09:29

Comme beaucoup d’autres, application/json est la bonne réponse.

Mais il n’est pas encore expliqué ce que signifient les autres options que vous proposez.

  • application/x-javascript : le type MIME expérimental pour JavaScript avant application/javascript était standard.

  • text/javascript : maintenant obsolète. Vous devez utiliser application/javascript lorsque vous utilisez javascript.

  • text/x-javascript : type MIME expérimental pour la situation ci-dessus.

  • text/x-json : type MIME expérimental pour JSON avant application/json reçu un enregistrement officiel.

En général, lorsque vous avez des doutes sur les types de contenu, vous devez vérifier ce lien.

156
02 апр. la réponse est donnée fcm 02 avril 2013-04-02 14:10 '13 à 14:10 2013-04-02 14:10

Dans JSP, vous pouvez utiliser ceci dans la directive page:

 <%@ page > 

Le type MIME correct pour JSON est application/json . JSP l'utilisera pour envoyer une réponse au client.

139
19 янв. la réponse est donnée raja 19 jan. 2013-01-19 11:22 '13 à 11:22 2013-01-19 11:22

" application/json " est le type correct de contenu JSON.

 def ajaxFindSystems = { def result = Systems.list() render(contentType:'application/json') { results { result.each{sys-> system(id:sys.id, name:sys.name) } } resultset (rows:result.size()) } } 
108
26 февр. La réponse est donnée par Sukane le 26 février. 2013-02-26 14:55 13 à 14:55 2013-02-26 14:55

Enregistrement IANA pour application/json dit

Applications utilisant ce type de support: JSON a été utilisé pour échanger des données entre des applications écrites dans tous ces >

Vous remarquerez que IANA.org ne répertorie aucun de ces autres types de média . En fait, même application/javascript est obsolète. Ainsi, application/json est vraiment la seule réponse correcte.

Le support du navigateur est une autre chose.

Les types de supports non standard les plus courants sont text/json ou text/javascript . Mais certains grands noms utilisent même text/plain .

Encore plus étrange est l'en-tête Content-Type envoyé par Flickr, qui renvoie JSON sous forme de text/xml . Google utilise text/javascript pour certains d'entre eux ajax apis.

Exemples:

 curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0> 

Sortie: type de Content-Type: text/javascript

 curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo> 

Sortie: type de Content-Type: text/xml

98
12 февр. Réponse donnée par Jhawins le 12 février 2014-02-12 19:12 '14 à 19:12 2014-02-12 19:12

Le type correct est application/json MIME application/json

MAIS

J'ai rencontré de nombreuses situations où j'ai besoin d'un type de navigateur ou d'un utilisateur d'infrastructure:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 la réponse est donnée à LombaX le 03 mai '13 à 19:00 2013-05-03 19:00

J'utilise ci-dessous

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 la réponse a été donnée par Andro le 16 mai '13 à 15:43 2013-05-16 15:43

L'en-tête de l'en - tête Content-Type doit être défini sur application / json lors de la publication. Le serveur qui écoute la demande doit inclure " Accepter = application / json ". Dans Spring MVC, vous pouvez procéder comme suit:

 @RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json") 

Ajouter des en-têtes à la réponse:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Réponse donnée par Alexander Burakevych le 09 août 2013-08-09 13:49 '13 à 13:49 2013-08-09 13:49

Au printemps , vous avez un type spécifique: MediaType.APPLICATION_JSON_VALUE , équivalent à application / json.

55
29 июня '13 в 11:34 2013-06-29 11:34 la réponse est donnée par Chand Priyankara le 29 juin 13 à 11:34 2013-06-29 11:34

application/json fonctionne très bien en PHP pour stocker un tableau ou un objet de données.

J'utilise ce code pour mettre des données au format JSON sur Google Cloud Storage (GCS) , qui est mis à la disposition du public pour l'affichage :

 $context = stream_context_create([ 'gs' => [ 'acl'=>'public-read', 'Content-Type' => 'application/json', ] ]); file_put_contents( "gs://BUCKETNAME/FILENAME.json", json_encode((object) $array), false, $context ); 

Pour renvoyer les données directement:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. La réponse est donnée à Chetabahana le 01 avril. 2015-04-01 19:13 '15 à 19:13 2015-04-01 19:13

Pour JSON, j'utilise:

  Content-Type: application/json 

Ceci est décrit dans la clause 1.2 . Spécifications JSON du format IETF JSON Data Interchange Format 7158.

47
06 февр. La réponse est donnée par Mehmet_ 06 février 2015-02-06 15:01 '15 à 15:01 2015-02-06 15:01

Si le JSON est application/jsonp , ce sera application/jsonp . Si JSON n'a pas de module complémentaire, ce sera application/json .

Pour y faire face, il est recommandé d'utiliser: "application / javascript", sans se soucier de savoir si c'est avec ou sans remplissage.

47
21 июня '13 в 18:22 2013-06-21 18:22 la réponse est donnée par Ankit Zalani le 21 juin '13 à 6:22 2013-06-21 18:22

Extension des réponses reçues lorsque vous utilisez JSON dans le contexte de REST ...

Il existe un argument de poids sur l’utilisation de application/x-resource+json et application/x-collection+json lorsque vous présentez des ressources et des collections REST.

Et si vous décidez de suivre la spécification jsonapi , vous devez utiliser application/vnd.api+json comme application/vnd.api+json .

Bien qu’il n’existe pas de norme universelle, il est clair que la sémantique ajoutée aux ressources transférées justifie un type de contenu plus explicite que simplement application/json .

Suite à ces considérations, d'autres contextes pourraient justifier un type de contenu plus spécifique.

40
09 июня '15 в 22:12 2015-06-09 22:12 la réponse est donnée jgomo3 09 juin '15 à 22h12 2015-06-09 22:12

Les développeurs PHP utilisent ceci:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 la réponse est donnée par user3087089 le 29 mars 2014 à 8:43 2014-03-29 08:43

Si vous obtenez les données de l'API REST en JSON, vous devez utiliser le type de contenu.

 For JSON data: Content-Type:application/json For HTML data: Content-Type:text/html, For XHTML data: Content-Type:application/xhtml+xml, For XML data: Content-Type:text/xml, application/xml 
37
11 апр. Réponse donnée par Krishna le 11 avril 2016-04-11 12:15 '16 à 12h15 2016-04-11 12h15

JSON (JavaScript Object Designation) et JSONP ("JSON avec padding") semblent très similaires et par conséquent, le type de MIME à utiliser peut être très déroutant. Bien que les formats semblent très similaires, il existe quelques différences subtiles entre eux.

Par conséquent, chaque fois que je doute, j’ai une approche très simple (qui fonctionne bien dans la plupart des cas), à savoir aller vérifier le document RFC correspondant.

JSON RFC 4627 (type d'application / support json pour la désignation d'objets JavaScript (JSON)) est une spécification de format JSON. La section 6 indique que le type multimédia MIME pour le texte JSON

 application/json. 

JSONP JSONP ("JSON avec add-on") est traité différemment de JSON dans le navigateur. JSONP est traité comme un script JavaScript standard et doit par conséquent utiliser application/javascript, type MIME officiel actuel pour JavaScript. Dans de nombreux cas, cependant, le type MIME text/javascript fonctionnera correctement.

Veuillez noter que text/javascript est marqué comme obsolète RFC 4329 (types de média de script), et il est recommandé d'utiliser application/javascript place. Cependant, pour des raisons héritées, text/javascript est encore largement utilisé et prend en charge plusieurs navigateurs (ce qui n’est pas toujours le type d’ application/javascript MIME, en particulier dans les anciens navigateurs).

23
15 февр. réponse donnée par Iresha Rubasinghe le 15 février 2016-02-15 06:20 '16 à 6:20 2016-02-15 06:20

Content-Type: application/json - JSON
Content-Type: application/javascript - json-p
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript, MAIS obsolète, les anciennes versions d'Internet Explorer étaient utilisées comme attribut HTML.
Content-Type: text/x-javascript - Types de multimédia JavaScript MAIS obsolètes
Content-Type: text/x-json - json avant l'enregistrement officiel de l'application / json.

22

Autres questions sur les balises ou ou Posez une question