Je joue avec JSON depuis un certain temps, je l'ai simplement mis sous forme de texte et cela n'a fait de mal à personne (à ma connaissance), mais j'aimerais commencer à faire les choses correctement.
J'ai vu tant de prétendues «normes» pour le type de contenu JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Mais lequel est correct, ou le meilleur? Je suppose qu'il existe des problèmes de sécurité et de prise en charge du navigateur variant entre eux.
Je sais qu'il y a une question similaire, quel type MIME si JSON est retourné par une API REST? , mais j'aimerais une réponse un peu plus ciblée.
L'IANA a enregistré le type MIME officiel pour JSON en tant que
application/json
.Lorsqu'on lui a demandé pourquoi
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 distribuerapplication/*
quetext/*
.Davantage de ressources:
la source
text/*
section dans les premiers jours qui seraient probablement mises dans laapplication/*
section ces jours-ci.cat file.jpg
par exemple. Alors que tout fichier xml ou json est 100% imprimable. Je pense donc que le point de Stijn de Witt est valable, malgré le fait qu'il est trop tard pour changer maintenant.x
caractère en minuscule . Pas 78. JSON est du texte exactement de la même manière que HTML (text / html). Il ne contient que des caractères de texte lisibles, avec une signification structurée.Pour JSON:
Pour JSON-P :
la source
Bien sûr, le type de média MIME correct pour JSON est
application/json
, mais il est nécessaire de savoir quel type de données est attendu dans votre application.Par exemple, j'utilise Ext GWT et la réponse du serveur doit aller en tant que texte / html mais contient des données JSON.
Côté client, écouteur de formulaire Ext GWT
En cas d'utilisation du type de réponse application / json , le navigateur me propose de sauvegarder le fichier.
Extrait de code source côté serveur utilisant Spring MVC
la source
JSON:
La réponse est des données générées dynamiquement, en fonction des paramètres de requête transmis dans l'URL.
Exemple:
Type de contenu:
application/json
JSON-P:
JSON avec rembourrage. La réponse est des données JSON, avec un appel de fonction enroulé autour.
Exemple:
Type de contenu:
application/javascript
la source
Si vous utilisez Ubuntu ou Debian et que vous servez des fichiers .json via Apache, vous souhaiterez peut-être servir les fichiers avec le type de contenu correct. Je le fais principalement parce que je veux utiliser l'extension Firefox JSONView
Le module Apache mod_mime vous aidera à le faire facilement. Cependant, avec Ubuntu, vous devez modifier le fichier /etc/mime.types et ajouter la ligne
Redémarrez ensuite Apache:
la source
Si vous appelez les services Web ASP.NET du côté client, vous devez l'utiliser
application/json
pour que cela fonctionne. Je pense que c'est la même chose pour les frameworks jQuery et Ext .la source
content-Type: text/plain
,content-Type: application/json
,content-Type: application/json; charset=UTF-8
,contentType: "application/x-www-form-urlencoded; charset=UTF-8"
Le bon type de contenu pour JSON est À
application/json
MOINS QUE vous n'utilisiez JSONP , également connu sous le nom de JSON avec remplissage, qui est en fait JavaScript et donc le bon type de contenu seraitapplication/javascript
.la source
Il ne fait aucun doute que
application/json
c'est le meilleur type MIME pour une réponse JSON.Mais j'avais une certaine expérience 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 GoDaddy . Ils ne me permettent pas de modifier les configurations de serveur. J'avais ajouté le code suivant à monweb.config
fichier pour compresser les réponses.En utilisant cela, les pages .aspx ont été compressées avec g-zip, mais pas les réponses JSON. J'ai ajouté
dans les sections types statique et dynamique. Mais cela ne compresse pas du tout les réponses JSON.
Après cela, j'ai supprimé ce type nouvellement ajouté et ajouté
dans les sections des types statiques et dynamiques et a changé le type de réponse dans
.ashx (gestionnaire asynchrone) vers
Et maintenant, j'ai trouvé que mes réponses JSON étaient compressées avec g-zip. Je recommande donc personnellement d'utiliser
uniquement si vous souhaitez 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 modifier les configurations IIS .
la source
application/json
, je l' effet de levier sur mon hébergement mutualisé et je ne suggère d' utiliser un type de contenu différent pour activer la compression de toute façon, il est tout simplement faux. Cela peut être fait, mais ce sera toujours faux. L'utilisation de différents types de contenu pour la prise en charge du navigateur est une chose, l'utilisation de différents types de contenu pour la compression côté serveur en est une autre.Seulement lors de l' utilisation en
application/json
tant que MIME type I donne les résultats suivants (en date de Novembre 2011 avec les versions les plus récentes de Chrome, Firefox avec Firebug ):la source
Tout ne fonctionne pas pour le type de contenu
application/json
.Si vous utilisez le formulaire Ext JS soumettre pour télécharger le fichier, sachez que la réponse du serveur est analysée par le navigateur pour créer le document pour le fichier
<iframe>
.Si le serveur utilise JSON pour envoyer l'objet de retour, l'en-
Content-Type
tête doit être défini surtext/html
afin de dire au navigateur d'insérer le texte inchangé dans le corps du document.Voir la documentation de l'API Ext JS 3.4.0 .
la source
application/json
par spec.iframe
semble le feuload
événement pourapplication/javascript
,application/x-javascript
,text/javascript
,text/plain
, mais pas de tir pourapplication/json
nitext/html
. À ce jour, Android <= 2,3 représente environ 50% de la part de marché d'Android.JSON est un langage spécifique à domaine (DSL) et un format de données indépendant de JavaScript, et en tant que tel a son propre MIME type
application/json
. Le respect des types MIME est bien sûr axé sur le client, iltext/plain
peut en être de même pour le transfert d'octets, mais alors vous pousseriez inutilement l'interprétation vers le domaine d'application du fournisseur -application/json
. Transféreriez-vous XML viatext/plain
?Mais honnêtement, votre choix de type MIME est un conseil au client sur la façon d'interpréter les données -
text/plain
outext/HTML
(quand ce n'est pas HTML) est comme l'effacement de type - c'est aussi peu informatif que de faire tous vos objets de type Object dans un langage typé.Aucun runtime de navigateur que je connais ne prendra un document JSON et le mettra automatiquement à la disposition du runtime en tant qu'objet accessible en JavaScript sans intervention, mais si vous travaillez avec un client handicapé, c'est une tout autre affaire. Mais ce n'est pas toute l'histoire: les services JSON RESTful n'ont souvent pas d'exécution JavaScript, mais cela ne les empêche pas d'utiliser JSON comme format d'échange de données viable. Si les clients sont aussi paralysés ... alors je considérerais peut-être plutôt l' injection HTML via un service de modèle Ajax .
Application / JSON!
la source
Si vous êtes dans un environnement côté client, une enquête sur la prise en charge de plusieurs navigateurs est obligatoire pour une application Web bien prise en charge.
Le bon type de contenu HTTP serait
application/json
, comme d'autres l'ont déjà souligné, mais certains clients ne le gèrent pas très bien, c'est pourquoi jQuery recommande la valeur par défauttext/html
.la source
La bonne réponse est:
la source
Comme beaucoup d'autres l'ont mentionné,
application/json
c'est la bonne réponse.Mais ce qui n'a pas encore été expliqué, c'est ce que signifient les autres options que vous avez proposées.
application/x-javascript
: Le type expérimental MIME pour JavaScriptapplication/javascript
était devenu standard.text/javascript
: Désormais obsolète. Vous devez utiliserapplication/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 d'application/json
être officiellement enregistré.Dans l'ensemble, chaque fois que vous avez des doutes sur les types de contenu, vous devriez vérifier ce lien
la source
text/javascript
devenu obsolète? Je remplis toujours des documents HTML avec des<script type="text/javascript" ...
balises.type="text/javascript"
et faire<script>...</script>
au moins selon HTML5.Dans JSP , vous pouvez utiliser cette directive dans la page:
Le type de média MIME correct pour JSON est
application/json
. JSP l'utilisera pour envoyer une réponse au client.la source
"
application/json
" Est le type de contenu JSON correct.la source
L' enregistrement IANA pour
application/json
ditVous remarquerez que IANA.org ne répertorie aucun de ces autres types de médias , en fait même
application/javascript
est désormais obsolète. C'est doncapplication/json
vraiment la seule bonne réponse possible .La prise en charge du navigateur est une autre chose.
Les types de supports non standard les plus largement pris en charge sont
text/json
outext/javascript
. Mais certains grands noms utilisent mêmetext/plain
.Encore plus étrange est l'en-tête Content-Type envoyé par Flickr, qui renvoie JSON sous
text/xml
. Google utilisetext/javascript
pour certains de ses apis ajax.Exemples:
Production:
Content-Type: text/javascript
Production:
Content-Type: text/xml
la source
Le bon type MIME est
application/json
MAIS
J'ai vécu de nombreuses situations où le type de navigateur ou l'utilisateur du framework avait besoin:
la source
J'utilise le ci-dessous
la source
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 " Accept = application / json ". Dans Spring MVC, vous pouvez le faire comme ceci:
Ajoutez des en-têtes à la réponse:
la source
Au printemps, vous avez un type défini:
MediaType.APPLICATION_JSON_VALUE
qui est équivalent à application / json .la source
J'utilise ce code pour mettre des données en JSON sur Google Cloud Storage (GCS) qui est défini publiquement :
Pour récupérer les données, c'est simple:
la source
Si le JSON est avec un remplissage, il le sera
application/jsonp
. Si le JSON est sans remplissage, il le seraapplication/json
.Pour gérer les deux, c'est une bonne pratique d'utiliser: 'application / javascript' sans se soucier que ce soit avec ou sans remplissage.
la source
Pour JSON, j'utilise:
Ceci est décrit dans la proposition de l'IETF JSON Data Interchange Format 7158, Section 1.2: Spécifications de JSON .
la source
Extension des réponses acceptées, lorsque vous utilisez JSON dans un contexte REST ...
Il existe un argument solide sur l'utilisation
application/x-resource+json
et leapplication/x-collection+json
moment où vous représentez les ressources et les collections REST.Et si vous décidez de suivre la spécification jsonapi , vous devez utiliser
application/vnd.api+json
, car elle est documentée.Bien qu'il n'y ait 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 juste
application/json
.Suivant ce raisonnement, d'autres contextes pourraient justifier un type de contenu plus spécifique .
la source
application/vnd.api+json
semble être spécifiquement pour les API utilisant json: api , une spécification très étroite avec ses propres attentes et format, je ne comprends pas que ce soit pour une API qui renvoie json. Veuillez me corriger si je me trompeLes développeurs PHP utilisent ceci:
la source
Si vous obtenez des données de l'API REST en JSON, vous devez donc utiliser le type de contenu
la source
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- javascriptContent-Type: text/javascript
- javascript MAIS obsolètes, les anciennes versions d'IE utilisées comme attribut html.Content-Type: text/x-javascript
- Types de supports JavaScript MAIS obsolètesContent-Type: text/x-json
- json avant l'application / json a été officiellement enregistré.la source
Les formats JSON (JavaScript Object Notation) et JSONP ("JSON with padding") semblent être très similaires et il peut donc être très déroutant de savoir quel type MIME ils devraient utiliser. Même si les formats sont similaires, il existe de subtiles différences entre eux.
Donc, en cas de doute, j'ai une approche très simple (qui fonctionne parfaitement bien dans la plupart des cas), à savoir aller vérifier le document RFC correspondant.
JSON RFC 4627 (le type de média application / json pour la notation d'objet JavaScript (JSON)) est une spécification du format JSON. Il est dit dans la section 6, que le type de média MIME pour le texte JSON est
JSONP JSONP ("JSON avec remplissage") est géré différemment de JSON, dans un navigateur. JSONP est traité comme un script JavaScript standard et doit donc utiliser
application/javascript,
le type MIME officiel actuel pour JavaScript. Dans de nombreux cas, cependant, letext/javascript
type MIME fonctionnera également très bien.Notez que cela
text/javascript
a été marqué comme obsolète par le document RFC 4329 (Scripting Media Types) et il est recommandé d'utiliserapplication/javascript
plutôt le type. Cependant, pour des raisons héritées, iltext/javascript
est toujours largement utilisé et il prend en charge plusieurs navigateurs (ce qui n'est pas toujours le cas avec leapplication/javascript
type MIME, en particulier avec les navigateurs plus anciens).la source