Ich habe einige Zeit mit JSON herumgespielt , es nur als Text herausgeschoben und es hat niemanden verletzt (von dem 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 welches ist richtig oder am besten? Ich stelle fest, dass es Sicherheits- und Browserunterstützungsprobleme gibt, die zwischen ihnen variieren.
Ich weiß, dass es eine ähnliche Frage gibt: Welcher MIME-Typ, wenn JSON von einer REST-API zurückgegeben wird? , aber ich hätte gerne eine etwas gezieltere Antwort.
IANA hat den offiziellen MIME-Typ für JSON als registriert
application/json
.Auf die Frage, warum nicht
text/json
, scheint Crockford gesagt zu haben, dass JSON weder JavaScript noch Text ist und dass IANA eher verteiltapplication/*
alstext/*
.Mehr Ressourcen:
quelle
text/*
den frühen Tagen wurden viele Dinge in die Sektion aufgenommen, die heutzutage wahrscheinlich in dieapplication/*
Sektion kommen würden.cat file.jpg
zum Beispiel zu laufen . Während jede XML- oder JSON-Datei zu 100% druckbar ist. Ich denke also, dass Stijn de Witts Argument gültig ist, obwohl es ja zu spät ist, sich jetzt zu ändern.x
. Nicht 78. JSON ist Text genauso wie HTML (Text / HTML). Es enthält nur lesbare Textzeichen mit strukturierter Bedeutung.Für JSON:
Für JSON-P :
quelle
Natürlich ist der richtige MIME-Medientyp für JSON
application/json
, aber Sie müssen wissen, welcher Datentyp in Ihrer Anwendung erwartet wird.Zum Beispiel verwende ich Ext GWT und die Serverantwort muss als Text / HTML lauten , enthält aber JSON-Daten.
Client-Seite, Ext GWT Form Listener
Bei Verwendung des Antworttyps application / json schlägt der Browser vor, die Datei zu speichern.
Serverseitiges Quellcode-Snippet mit Spring MVC
quelle
JSON:
Die Antwort besteht aus dynamisch generierten Daten gemäß den in der URL übergebenen Abfrageparametern.
Beispiel:
Inhaltstyp:
application/json
JSON-P:
JSON mit Polsterung. Die Antwort sind JSON-Daten, um die ein Funktionsaufruf gewickelt ist.
Beispiel:
Inhaltstyp:
application/javascript
quelle
Wenn Sie Ubuntu oder Debian verwenden und .json-Dateien über Apache bereitstellen, möchten Sie möglicherweise die Dateien mit dem richtigen Inhaltstyp bereitstellen. Ich mache dies hauptsächlich, weil ich die Firefox-Erweiterung JSONView verwenden möchte
Das Apache-Modul mod_mime hilft dabei. Unter Ubuntu müssen Sie jedoch die Datei /etc/mime.types bearbeiten und die Zeile hinzufügen
Starten Sie dann Apache neu:
quelle
Wenn Sie ASP.NET Web Services vom Client aus aufrufen, müssen Sie es verwenden,
application/json
damit es funktioniert. Ich glaube, dass dies auch für die Frameworks jQuery und Ext gilt .quelle
content-Type: text/plain
,content-Type: application/json
,content-Type: application/json; charset=UTF-8
,contentType: "application/x-www-form-urlencoded; charset=UTF-8"
Der richtige Inhaltstyp für JSON ist, es sei
application/json
denn, Sie verwenden JSONP , auch als JSON mit Auffüllung bekannt. Dies ist eigentlich JavaScript und daher der richtige Inhaltstypapplication/javascript
.quelle
Es besteht kein Zweifel, dass
application/json
der beste MIME- Typ für eine JSON-Antwort ist.Aber ich hatte einige Erfahrungen, die ich
application/x-javascript
aufgrund einiger Komprimierungsprobleme verwenden musste. Meine Hosting-Umgebung ist Shared Hosting mit GoDaddy . Sie erlauben mir nicht, Serverkonfigurationen zu ändern. Ich hatte derweb.config
Datei den folgenden Code zum Komprimieren von Antworten hinzugefügt .Auf diese Weise wurden die ASPX-Seiten mit g-zip komprimiert, JSON-Antworten jedoch nicht. Ich fügte hinzu
in den Abschnitten statische und dynamische Typen. Dies komprimiert JSON-Antworten jedoch überhaupt nicht.
Danach habe ich diesen neu hinzugefügten Typ entfernt und hinzugefügt
in den Abschnitten für statische und dynamische Typen und änderte den Antworttyp in
.ashx (asynchroner Handler) zu
Und jetzt stellte ich fest, dass meine JSON-Antworten mit g-zip komprimiert wurden. Daher empfehle ich persönlich zu verwenden
Nur wenn Sie Ihre JSON-Antworten in einer gemeinsam genutzten Hosting-Umgebung komprimieren möchten . Da beim Shared Hosting die IIS- Konfigurationen nicht geändert werden können .
quelle
application/json
, ich nutze es für mein Shared Hosting und würde nicht empfehlen, einen anderen Inhaltstyp zu verwenden, um die Komprimierung zu aktivieren. Es ist einfach falsch. Es kann getan werden, aber es wird immer noch falsch sein. Die Verwendung unterschiedlicher Inhaltstypen für die Browserunterstützung ist eine Sache, die Verwendung unterschiedlicher Inhaltstypen für die serverseitige Komprimierung eine andere.Nur bei Verwendung
application/json
als MIME- Typ habe ich Folgendes (Stand November 2011 mit den neuesten Versionen von Chrome, Firefox mit Firebug ):quelle
Nicht alles funktioniert für den Inhaltstyp
application/json
.Wenn Sie das Ext JS- Formular zum Hochladen von Dateien verwenden, beachten Sie, dass die Serverantwort vom Browser analysiert wird, um das Dokument für das zu erstellen
<iframe>
.Wenn der Server JSON zum Senden des Rückgabeobjekts verwendet,
Content-Type
muss der Header auf gesetzt werdentext/html
werden, damit der Browser den Text unverändert in den Dokumententext einfügen kann.Weitere Informationen finden Sie in der Dokumentation zur Ext JS 3.4.0-API .
quelle
application/json
pro Spezifikation.iframe
scheint Feuerload
Ereignis fürapplication/javascript
,application/x-javascript
,text/javascript
,text/plain
, aber nicht feuern sie fürapplication/json
nochtext/html
. Bis heute macht Android <= 2.3 etwa 50% des Android-Marktanteils aus.JSON ist eine domänenspezifische Sprache (DSL) und ein von JavaScript unabhängiges Datenformat und hat als solches einen eigenen MIME- Typ
application/json
. Der Respekt für MIME-Typen ist natürlich clientgesteuert,text/plain
kann also für die Übertragung von Bytes gelten, aber dann würden Sie die Interpretation unnötig auf die Anwendungsdomäne des Anbieters übertragen -application/json
. Würden Sie XML über übertragentext/plain
?Aber ehrlich gesagt ist Ihre Wahl des MIME-Typs ein Ratschlag für den Kunden, wie die Daten zu interpretieren sind -
text/plain
odertext/HTML
(wenn es sich nicht um HTML handelt) wie das Löschen von Daten - es ist ebenso wenig aussagekräftig wie das Erstellen aller Objekte vom Typ Object in einer typisierten Sprache.Keine mir bekannte Browser-Laufzeit nimmt ein JSON-Dokument und stellt es der Laufzeit automatisch als JavaScript-zugängliches Objekt ohne Intervention zur Verfügung. Wenn Sie jedoch mit einem verkrüppelten Client arbeiten, ist dies eine ganz andere Sache. Aber das ist nicht die ganze Geschichte - RESTful JSON-Dienste haben oft keine JavaScript-Laufzeiten, aber es hindert sie nicht daran, JSON als praktikables Datenaustauschformat zu verwenden. Wenn Clients so verkrüppelt sind ... dann würde ich vielleicht stattdessen eine HTML-Injection über einen Ajax- Template-Service in Betracht ziehen .
Anwendung / JSON!
quelle
Wenn Sie sich in einer clientseitigen Umgebung befinden, müssen Sie sich über die browserübergreifende Unterstützung für eine gut unterstützte Webanwendung informieren.
Der richtige HTTP-Inhaltstyp wäre
application/json
, wie andere bereits hervorgehoben haben, aber einige Clients gehen nicht sehr gut damit um. Deshalb empfiehlt jQuery die Standardeinstellungtext/html
.quelle
Die richtige Antwort ist:
quelle
Wie viele andere bereits erwähnt haben,
application/json
ist die richtige Antwort.Was jedoch noch nicht erklärt wurde, ist die Bedeutung der anderen von Ihnen vorgeschlagenen Optionen.
application/x-javascript
: Der experimentelle MIME-Typ für JavaScript wurde zuvorapplication/javascript
zum Standard gemacht.text/javascript
: Jetzt veraltet. Sie sollten verwenden,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 erapplication/json
offiziell registriert wurde.Alles in allem sollten Sie diesen Link überprüfen, wenn Sie Zweifel an den Inhaltstypen haben
quelle
text/javascript
obsolet geworden? Ich fülle immer noch HTML-Dokumente mit<script type="text/javascript" ...
Tags.type="text/javascript"
und nur<script>...</script>
mindestens gemäß HTML5 tun .In JSP können Sie dies in der Seitenanweisung verwenden:
Der richtige MIME- Medientyp für JSON ist
application/json
. JSP verwendet es zum Senden einer Antwort an den Client.quelle
"
application/json
" Ist der richtige JSON-Inhaltstyp.quelle
Die IANA-Registrierung für
application/json
sagtSie werden feststellen, dass IANA.org keinen dieser anderen Medientypen auflistet , sondern sogar
application/javascript
veraltet ist. Alsoapplication/json
ist wirklich die einzig mögliche richtige Antwort.Browser-Unterstützung ist eine andere Sache.
Die am häufigsten unterstützten nicht standardmäßigen Medientypen sind
text/json
odertext/javascript
. Aber einige große Namen verwenden sogartext/plain
.Noch seltsamer ist der Content-Type-Header von Flickr, der JSON als zurückgibt
text/xml
. Google verwendettext/javascript
für einige seiner Ajax Apis.Beispiele:
Ausgabe:
Content-Type: text/javascript
Ausgabe:
Content-Type: text/xml
quelle
Der richtige MIME-Typ ist
application/json
ABER
Ich habe viele Situationen erlebt, in denen der Browsertyp oder der Framework-Benutzer Folgendes benötigten:
quelle
Ich benutze das unten
quelle
Der Content-Type- Header sollte beim Posten auf ' application / json ' gesetzt werden. Der Server, der auf die Anforderung wartet, sollte " Accept = application / json " enthalten. In Spring MVC können Sie dies folgendermaßen tun:
Fügen Sie der Antwort Header hinzu:
quelle
In Spring haben Sie einen definierten Typ: Dies
MediaType.APPLICATION_JSON_VALUE
entspricht application / json .quelle
Ich verwende diesen Code, um Daten in JSON in Google Cloud Storage (GCS) abzulegen, das öffentlich sichtbar ist :
Das Zurückholen der Daten ist unkompliziert:
quelle
Wenn der JSON aufgefüllt ist, ist dies der Fall
application/jsonp
. Wenn der JSON ohne Auffüllung ist, ist dies der Fallapplication/json
.Um mit beiden fertig zu werden, ist es eine gute Praxis, 'application / javascript' zu verwenden, ohne sich darum zu kümmern, ob es sich um Polsterung oder um Polsterung handelt.
quelle
Für JSON verwende ich:
Dies wird im Vorschlag JSET Data Interchange Format 7158 der IETF, Abschnitt 1.2: Spezifikationen von JSON beschrieben .
quelle
Erweitern der akzeptierten Antworten, wenn Sie JSON in einem REST-Kontext verwenden ...
Es gibt ein starkes Argument für die Verwendung
application/x-resource+json
undapplication/x-collection+json
die Darstellung von REST-Ressourcen und -Sammlungen.Und wenn Sie sich entscheiden, die jsonapi- Spezifikation zu befolgen , sollten Sie diese verwenden
application/vnd.api+json
, wie es dokumentiert ist.Obwohl es keinen universellen Standard gibt, ist es klar, dass die zusätzliche Semantik zu den übertragenen Ressourcen einen expliziteren Inhaltstyp als nur rechtfertigt
application/json
.Nach dieser Überlegung könnten andere Kontexte einen spezifischeren Inhaltstyp rechtfertigen .
quelle
application/vnd.api+json
scheint speziell für APIs zu sein, die json verwenden: api , eine sehr enge Spezifikation mit eigenen Erwartungen und Format. Ich verstehe es nicht für eine API, die json zurückgibt. Bitte korrigieren Sie mich, wenn ich falschPHP-Entwickler verwenden dies:
quelle
Wenn Sie Daten von der REST-API in JSON erhalten, müssen Sie den Inhaltstyp verwenden
quelle
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- javascriptContent-Type: text/javascript
- javascript ABER veraltete, ältere IE-Versionen, die als HTML-Attribut verwendet wurden.Content-Type: text/x-javascript
- JavaScript-Medientypen ABER veraltetContent-Type: text/x-json
- json bevor application / json offiziell registriert wurde.quelle
Die Formate JSON (JavaScript Object Notation) und JSONP ("JSON with padding") scheinen sehr ähnlich zu sein, und daher kann es sehr verwirrend sein, welchen MIME-Typ sie verwenden sollten. Obwohl die Formate ähnlich sind, gibt es einige subtile Unterschiede zwischen ihnen.
Wenn ich also Zweifel habe, habe ich einen sehr einfachen Ansatz (der in den meisten Fällen einwandfrei funktioniert), nämlich das entsprechende RFC-Dokument zu überprüfen.
JSON RFC 4627 ( JSON (Application / JSON Media Type für JavaScript Object Notation)) ist eine Spezifikation des JSON-Formats. In Abschnitt 6 heißt es, dass der MIME-Medientyp für JSON-Text lautet
JSONP JSONP ("JSON mit Auffüllung") wird in einem Browser anders behandelt als JSON. JSONP wird als reguläres JavaScript-Skript behandelt und sollte daher
application/javascript,
den aktuellen offiziellen MIME-Typ für JavaScript verwenden. In vielen Fällentext/javascript
funktioniert der MIME-Typ jedoch auch einwandfrei.Beachten Sie, dass dies
text/javascript
vom Dokument RFC 4329 (Scripting Media Types) als veraltet markiert wurde. Es wird empfohlen,application/javascript
stattdessen den Typ zu verwenden. Aus früheren Gründentext/javascript
ist es jedoch immer noch weit verbreitet und wird browserübergreifend unterstützt (was beimapplication/javascript
MIME-Typ nicht immer der Fall ist , insbesondere bei älteren Browsern).quelle