Was ist der korrekte Typ von JSON-Inhalten?

Ich habe einige Zeit mit JSON herumgespielt und es einfach als Text ausgegeben, und es hat niemandem geschadet (was ich weiß), aber ich würde gerne anfangen, die Dinge richtig zu machen.

Ich habe so viele angebliche "Standards" für den JSON-Inhaltstyp gesehen:

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

Aber was ist richtig oder besser? Ich verstehe, dass zwischen ihnen Sicherheitsprobleme und Browserunterstützung bestehen.

Ich weiß, dass es eine ähnliche Frage gibt: Was ist der MIME-Typ, wenn JSON von der REST-API zurückgegeben wird? Ich hätte jedoch gerne eine etwas fokussiertere Antwort.

9470
25 янв. eingestellt von Oli 25. Januar 2009-01-25 18:25 09 um 18:25 2009-01-25 18:25
@ 38 Antworten
  • 1
  • 2

Für JSON-Text:

application/json

Der MIME-Medientyp für JSON-Text lautet application/json . Die Standardkodierung ist UTF-8. (Quelle: RFC 4627 ).

Für JSONP (ausführbares Javascript) mit Rückruf:

application/javascript

Hier sind einige Blogbeiträge, die in den Kommentaren erwähnt wurden, die für den Fall relevant sind.

9468
25 янв. Gumbo antwortete am 25. Januar 2009-01-25 18:27 09 um 18:27 2009-01-25 18:27

IANA hat den offiziellen MIME-Typ für JSON als application/json registriert.

Auf die Frage, warum nicht text/json gefragt wird, scheint Crockford gesagt zu haben, dass JSON nicht wirklich JavaScript ist, sondern Text, und IANA wird wahrscheinlich eher application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Mit diesem wurden die ASPX-Seiten mit g-zip komprimiert, die JSON-Antworten jedoch nicht. Ich habe hinzugefügt

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

in Abschnitten statischer und dynamischer Typen. Dies komprimiert jedoch keine JSON-Antworten.

Danach habe ich diesen neuen Typ gelöscht und hinzugefügt

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

in Abschnitten von statischen und dynamischen Typen und änderte die Art der Antwort in

.ashx (asynchroner Handler) ein

 application/x-javascript 

Und jetzt stellte ich fest, dass meine JSON-Antworten g-zip-komprimiert waren. Daher empfehle ich persönlich die Verwendung

 application/x-javascript 

Nur wenn Sie Ihre JSON-Antworten in einer öffentlichen Hosting-Umgebung komprimieren möchten. Sie erlauben nicht, IIS- Konfigurationen für Shared Hosting zu ändern.

282
18 апр. die antwort wird von shashwat 18 apr. gegeben . 2012-04-18 11:22 '12 am 11:22 2012-04-18 11:22

Nur wenn Sie application/json als MIME verwenden, habe ich Folgendes (seit November 2011 mit den neuesten Versionen von Chrome, Firefox mit Firebug ):

  • Keine Warnungen mehr von Chrome beim Herunterladen von JSON vom Server.
  • Firebug fügt der Antwort eine Registerkarte hinzu, die Ihre JSON-formatierten Daten anzeigt. Wenn der MIME-Typ unterschiedlich ist, wird er als "Antwortinhalt" angezeigt.
257
30 нояб. Die Antwort wird von Ivo Limmen am 30. November gegeben. 2011-11-30 09:42 '11 am 9:42 2011-11-30 09:42

Nicht alles funktioniert für den Inhaltstyp application/json .

Wenn Sie Ext JS zum Senden einer Datei verwenden, beachten Sie, dass die Antwort des Servers vom Browser analysiert wird, um ein Dokument für den <iframe> zu erstellen.

Wenn der Server JSON zum Senden des zurückgegebenen Objekts verwendet, muss der Content-Type Header auf text/html sein, damit der Browser Text ohne Änderungen in den Hauptteil des Dokuments einfügen kann.

Weitere Informationen finden Sie in der Dokumentation zur Ext JS 3.4.0 API .

232
07 сент. Conan antwortete am 07.09 2011-09-07 05:41 '11 um 05:41 2011-09-07 05:41

JSON ist ein von JavaScript unabhängiges Domänensprache (DSL) und Datenformat und hat als solches sein eigenes MIME , application/json . Der Respekt für MIME-Typen hängt natürlich vom Client ab. text/plain kann also Bytes übertragen. In diesem Fall interpretieren Sie die Interpretation der Domäne des Anwendungsanbieters - application/json - unnötig. Übergeben Sie XML per text/plain ?

Wenn Sie sich für den MIME-Typ entscheiden, geben Sie dem Client jedoch an, wie er die Daten interpretieren soll - text/plain oder text/HTML (wenn es sich nicht um HTML handelt) - wie das Löschen von Stilen. Es ist nicht informativ wie das Erstellen aller Objekte auf einem Typ Sprache.

Fehlende Browser-Ausführungszeit, von der ich weiß, dass ein JSON-Dokument automatisch zur Laufzeit zur Verfügung gestellt werden muss, ohne dass auf JavaScript zugegriffen werden muss, aber wenn Sie mit einem verkrüppelten Client arbeiten, ist dies eine andere Sache. Dies ist jedoch nicht die ganze Geschichte. REST-fähige JSON-Services verfügen häufig nicht über JavaScript-Autonomie. Dies hindert sie jedoch nicht daran, JSON als praktikables Datenaustauschformat zu verwenden. Wenn Kunden beschädigt sind ... dann würde ich es für möglich halten, dass die HTML-Injektion mithilfe einer Ajax- Vorlage erfolgt.

Anwendung / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 Die Antwort gibt VLostBoy am 15. Mai '12 um 01:19 2012-05-15 01:19

Wenn Sie sich in einer clientseitigen Umgebung befinden, ist für eine gut unterstützte Webanwendung eine Cross-Browser-Unterstützung erforderlich.

Der richtige HTTP-Inhaltstyp ist " application/json , da auch andere bereits zugewiesen sind. Einige Clients behandeln dies jedoch nicht sehr gut. Daher empfiehlt jQuery die Verwendung des Standardtextes " text/html .

201
27 апр. Die Antwort gibt Emanuele Del Grande am 27. April. 2012-04-27 19:27 '12 um 19:27 Uhr 2012-04-27 19:27

Die richtige Antwort lautet:

 Content-Type: application/json 
159
31 дек. Die Antwort gibt Irfan DANISH 31 dec. 2012-12-31 09:29 13 um 09:29 2012-12-31 09:29

Wie viele andere ist application/json die richtige Antwort.

Es ist jedoch noch nicht erklärt, was die anderen Optionen, die Sie anbieten, bedeuten.

  • application/x-javascript : Der experimentelle MIME-Typ für JavaScript vor der application/javascript war Standard.

  • text/javascript : jetzt veraltet. Sie müssen application/javascript wenn Sie Javascript verwenden.

  • text/x-javascript : Experimenteller MIME-Typ für die obige Situation.

  • text/x-json : experimenteller MIME-Typ für JSON, bevor die application/json offiziell registriert wurde.

Im Allgemeinen sollten Sie diesen Link immer dann überprüfen, wenn Sie Zweifel an den Inhaltstypen haben .

156
02 апр. die antwort ist gegeben fcm 02 apr 2013-04-02 14:10 '13 am 14:10 2013-04-02 14:10

In JSP können Sie dies in der Seitenanweisung verwenden:

 <%@ page > 

Der richtige MIME- Typ für JSON ist application/json . JSP verwendet es, um eine Antwort an den Client zu senden.

139
19 янв. die antwort ist raja 19 jan gegeben. 2013-01-19 11:22 13 am 11:22 2013-01-19 11:22

" application/json " ist der korrekte Typ von JSON-Inhalten.

 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 февр. Die Antwort wird am 26. Februar von Sukane gegeben . 2013-02-26 14:55 '13 am 14:55 2013-02-26 14:55

IANA Registrierung für application/json sagt

Anwendungen, die diesen Medientyp verwenden: JSON wurde verwendet, um Daten zwischen Anwendungen auszutauschen, die in allen diesen Programmiersprachen geschrieben wurden: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Sie werden feststellen, dass IANA.org keine dieser anderen Arten von Medien auflistet. Tatsächlich ist sogar application/javascript veraltet. Somit ist application/json wirklich die einzig richtige Antwort.

Browser-Unterstützung ist eine andere Sache.

Die häufigsten nicht standardmäßigen Medientypen sind text/json oder text/javascript . Einige große Namen verwenden jedoch sogar text/plain .

Noch unbekannter ist der von Flickr gesendete Content-Type-Header, der JSON als text/xml zurückgibt. Google verwendet text/javascript für einige von ihnen Ajax Apis.

Beispiele:

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

Ausgabe: Content-Type: text/javascript

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

Ausgabe: Content-Type: text/xml

98
12 февр. Antwort von Jhawins 12. Februar 2014-02-12 19:12 14 um 19:12 2014-02-12 19:12

Der richtige Typ ist MIME- application/json

ABER

Ich habe viele Situationen erlebt, in denen ich einen Browsertyp oder einen Framework-Benutzer benötige:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 Die Antwort wird gegeben LombaX 03 Mai '13 um 19:00 2013-05-03 19:00

Ich benutze unten

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 Die Antwort wurde von Andro am 16. Mai 13 um 15:43 2013-05-16 15:43 gegeben

Der Header des Content-Type- Headers sollte beim Veröffentlichen auf application / json gesetzt werden . Der Server, der auf die Anforderung wartet, muss " Accept = application / json " enthalten. In Spring MVC können Sie dies wie folgt tun:

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

Fügen Sie der Antwort Header hinzu:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Antwort von Alexander Burakevych 09 Aug. 2013-08-09 13:49 13 um 13:49 2013-08-09 13:49

Im Frühling haben Sie einen bestimmten Typ: MediaType.APPLICATION_JSON_VALUE , der zu application / json äquivalent ist.

55
29 июня '13 в 11:34 2013-06-29 11:34 Die Antwort gibt Chand Priyankara am 29. Juni 13 um 11:34 Uhr 2013-06-29 11:34

application/json funktioniert in PHP gut, um ein Array oder ein Datenobjekt zu speichern.

Ich verwende diesen Code, um Daten in JSON in Google Cloud Storage (GCS) zu speichern, das öffentlich zur Ansicht verfügbar ist :

 $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 ); 

Daten direkt zurückgeben:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Die Antwort ist gegeben Chetabahana 01 Apr. 2015-04-01 19:13 '15 um 19:13 2015-04-01 19:13

Für JSON verwende ich:

  Content-Type: application/json 

Dies wird in der IETF JSON Data Interchange Format 7158-Klausel in Abschnitt 1.2: JSON-Spezifikationen beschrieben .

47
06 февр. Die Antwort wird von Mehmet_ 06 Feb. gegeben. 2015-02-06 15:01 '15 am 15:01 2015-02-06 15:01

Wenn der JSON application/jsonp ist, wird er application/jsonp . Wenn JSON kein Add-On hat, handelt es sich um application/json .

Um mit ihnen umzugehen, wird empfohlen, "application / javascript" zu verwenden, ohne sich darüber Gedanken zu machen, ob es sich um ein Padding handelt oder nicht.

47
21 июня '13 в 18:22 2013-06-21 18:22 Die Antwort gibt Ankit Zalani am 21. Juni '13 um 6:22 Uhr 2013-06-21 18:22

Erweiterung der erhaltenen Antworten, wenn Sie JSON im Kontext von REST verwenden ...

Es gibt ein starkes Argument für die Verwendung von application/x-resource+json und application/x-collection+json wenn Sie Ressourcen und REST-Sammlungen präsentieren.

Wenn Sie sich für die jsonapi- Spezifikation entscheiden, sollten Sie application/vnd.api+json wie dokumentiert verwenden.

Obwohl es keinen universellen Standard gibt, ist klar, dass die hinzugefügte Semantik der übertragenen Ressourcen einen expliziteren Content-Type als nur application/json rechtfertigt.

Nach diesen Überlegungen können andere Kontexte einen spezifischeren Inhaltstyp rechtfertigen.

40
09 июня '15 в 22:12 2015-06-09 22:12 Die Antwort ist gegeben jgomo3 09. Juni '15 um 22:12 Uhr 2015-06-09 22:12

PHP-Entwickler verwenden dies:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 Die Antwort wird von user3087089 29. März 14 um 08:43 2014-03-29 08:43 gegeben

Wenn Sie die Daten von der REST-API in JSON abrufen, müssen Sie den Inhaltstyp verwenden

 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 апр. Antwort von Krishna am 11. April 2016-04-11 12:15 '16 um 12:15 Uhr 2016-04-11 12:15

JSON (JavaScript Object Designation) und JSONP ("JSON with padding") scheinen sich sehr ähnlich zu sein. Daher kann es sehr verwirrend sein, welche Art von MIME sie verwenden sollen. Obwohl die Formate sehr ähnlich zu sein scheinen, gibt es einige subtile Unterschiede zwischen ihnen.

Daher habe ich, wenn ich daran zweifle, einen sehr einfachen Ansatz (der in den meisten Fällen gut funktioniert), nämlich das entsprechende RFC-Dokument zu überprüfen.

JSON RFC 4627 (Anwendungstyp / Json Media zum Festlegen von JavaScript-Objekten (JSON)) ist eine Spezifikation im JSON-Format. Abschnitt 6 gibt an, dass der MIME-Multimedia-Typ für JSON-Text gilt

 application/json. 

JSONP JSONP ("JSON mit Add-On") wird anders als JSON im Browser verarbeitet. JSONP wird wie ein normales JavaScript-Skript behandelt. Daher muss application/javascript, aktuelle offizielle MIME-Typ für JavaScript, verwendet werden. In vielen Fällen funktioniert der text/javascript MIME-Typ jedoch einwandfrei.

Bitte beachten Sie, dass text/javascript als veraltete RFC 4329 (Scripting Media Types) markiert ist, und es wird empfohlen, stattdessen application/javascript verwenden. Aus vererbten Gründen wird text/javascript jedoch immer noch häufig verwendet und unterstützt Cross-Browser (was nicht immer die Art der application/javascript MIME ist, insbesondere bei älteren Browsern).

23
15 февр. Antwort von Iresha Rubasinghe am 15. Februar 2016-02-15 06:20 '16 am 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, ABER veraltet, ältere IE-Versionen, die als HTML-Attribut verwendet wurden.
Content-Type: text/x-javascript - JavaScript-Multimediatypen, aber veraltet
Content-Type: text/x-json json vor der offiziellen Registrierung der Anwendung / json.

22

Weitere Fragen zu Tags oder Frage stellen