11373 Stimmen

Was ist der richtige JSON-Inhaltstyp?

Ich habe herumgespielt mit JSON Ich habe eine Zeit lang nur als Text gepusht, und es hat niemandem geschadet (soweit ich weiß), aber ich würde gerne anfangen, die Dinge richtig zu machen.

Ich habe gesehen also viele vermeintliche "Standards" für den Inhaltstyp JSON:

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

Aber welche ist die richtige oder die beste? Ich vermute, dass es unterschiedliche Sicherheits- und Browserunterstützungsprobleme gibt.

Ich weiß, dass es eine ähnliche Frage gibt, Welcher MIME-Typ, wenn JSON von einer REST-API zurückgegeben wird? aber ich hätte gern eine etwas gezieltere Antwort.

264voto

Conan Punkte 2934

Nicht alles funktioniert beim Inhaltstyp application/json .

Wenn Sie Folgendes verwenden Ext JS Formular abschicken, um eine Datei hochzuladen, beachten Sie, dass die Serverantwort vom Browser geparst wird, um das Dokument für die <iframe> .

Wenn der Server JSON verwendet, um das Rückgabeobjekt zu senden, dann muss die Content-Type Kopfzeile muss gesetzt werden auf text/html um dem Browser mitzuteilen, dass er den Text unverändert in den Textkörper des Dokuments einfügen soll.

Siehe die Ext JS 3.4.0 API-Dokumentation .

44 Stimmen

Werkzeuge, die sich nicht an Standards halten, sollten nach Möglichkeit vermieden werden; verwenden Sie application/json gemäß Spezifikation.

16 Stimmen

@one.beat.consumer das stimmt zwar, aber es ist nicht spezifisch für ExtJs per se. Es ist eine Browser-Beschränkung (oder vielleicht eher eine "Sicherheitsmaßnahme").

9 Stimmen

Wäre es nicht besser, text/plain zu verwenden, damit keine HTML-Semantik auf Nicht-HTML-Inhalte angewendet wird? Oder lassen Browser nicht zu, dass man den Inhalt eines Frames extrahiert, wenn er kein DOM hat?

240voto

VLostBoy Punkte 3894

JSON ist ein fachspezifische Sprache (DSL) und ein von JavaScript unabhängiges Datenformat und hat als solches seine eigene MIME Typ, application/json . Die Einhaltung der MIME-Typen ist natürlich vom Client abhängig, so dass text/plain kann für die Übertragung von Bytes ausreichen, aber dann würden Sie die Interpretation unnötigerweise in die Anwendungsdomäne des Anbieters verlagern - application/json . Würden Sie XML über text/plain ?

Aber ehrlich gesagt ist die Wahl des MIME-Typs ein Hinweis für den Client, wie er die Daten interpretieren soll. text/plain o text/HTML (wenn es sich nicht um HTML handelt) ist wie das Auslöschen von Typen - es ist genauso uninformativ, wie wenn man in einer typisierten Sprache alle Objekte vom Typ Object macht.

Keine mir bekannte Browser-Laufzeitumgebung nimmt ein JSON-Dokument und stellt es der Laufzeitumgebung automatisch als JavaScript-Objekt zur Verfügung, ohne dass ein Eingriff erforderlich ist. Aber das ist nicht die ganze Geschichte. RESTful JSON-Dienste verfügen oft nicht über JavaScript-Laufzeiten, was sie aber nicht daran hindert, JSON als praktikables Datenaustauschformat zu verwenden. Wenn Clients so verkrüppelt sind... dann würde ich vielleicht HTML-Injektion über eine Ajax stattdessen den Templating-Dienst.

Anwendung/JSON!

221voto

yodabar Punkte 4421

Wenn Sie in einer Client-seitigen Umgebung arbeiten, ist die Untersuchung der Cross-Browser-Unterstützung für eine gut unterstützte Webanwendung unerlässlich.

Der richtige HTTP Content-Type wäre application/json wie auch schon andere hervorgehoben haben, aber einige Clients können damit nicht gut umgehen, deshalb empfiehlt jQuery die Standard text/html .

186voto

Irfan DANISH Punkte 7917

Die richtige Antwort lautet:

Content-Type: application/json

181voto

fcm Punkte 5885

Wie viele andere bereits erwähnt haben, application/json ist die richtige Antwort.

Was aber noch nicht erklärt wurde, ist, was die anderen von Ihnen vorgeschlagenen Optionen bedeuten.

  • application/x-javascript : Experimenteller MIME-Typ für JavaScript vor application/javascript wurde zum Standard.

  • text/javascript : Jetzt veraltet. Sie sollten verwenden application/javascript bei Verwendung von Javascript.

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

  • text/x-json : Experimenteller MIME-Typ für JSON vor application/json wurde offiziell registriert.

Alles in allem sollten Sie, wann immer Sie Zweifel an den Inhaltstypen haben, Folgendes überprüfen dieser Link

16 Stimmen

Wann hat text/javascript überflüssig werden? Ich fülle immer noch HTML-Dokumente mit <script type="text/javascript" ... Tags.

8 Stimmen

Bei den Browsern macht das eigentlich keinen Unterschied. Es ist nur für RFC-Standards veraltet: rfc-editor.org/rfc/rfc4329.txt

18 Stimmen

@Oli kannst du getrost fallen lassen type="text/javascript" und einfach tun <script>...</script> zumindest nach HTML5.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X