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.

11411voto

Gumbo Punkte 617646

Für JSON-Text:

application/json

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

Für JSONP (lauffähiges JavaScript) mit Rückruf:

application/javascript

Hier sind einige Blogbeiträge, die in den entsprechenden Kommentaren erwähnt wurden:

87 Stimmen

0 Stimmen

Spielt es wirklich eine Rolle, welchen Mime-Typ er hat? Es ist Text, der in ein Objekt geparst wird. Wäre es nicht natürlicher, ihn als text/plain zu übergeben, wenn Sie wollen, dass er im Browser geöffnet werden kann, ohne einen Download zu erzwingen, und als application/octet-stream, wenn Sie wollen, dass er automatisch heruntergeladen wird (nützlich, wenn Sie ihn auf einer Webseite erzeugen, die lokal gespeichert werden soll). Gibt es wirklich so viele Leute, die den Mime-Type kennen müssen, damit der Downloader ihn mit einem speziellen Json-Viewer anzeigen kann? Was übersehe ich, das einen speziellen Mime-Typ rechtfertigt?

0 Stimmen

Die Verwendung von "text/plain" ist im Allgemeinen eine schlechte Praxis. So gibt es beispielsweise Angriffe auf die Webplattform, die einen herkunftsübergreifenden Datendiebstahl ermöglichen, wenn Sie keinen geeigneten MIME-Typ-Wert senden.

1780voto

gnrfan Punkte 18511

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

Auf die Frage, warum nicht text/json Crockford scheint gesagt zu haben, dass JSON weder wirklich JavaScript noch Text ist, und auch die IANA war eher dazu geneigt, die application/* als text/* .

Weitere Ressourcen:

183 Stimmen

Vieles wurde in die text/* in der Anfangszeit einen Abschnitt, der wahrscheinlich in die application/* in diesen Tagen.

38 Stimmen

@Rohmer - Sie "können" alles in einem Texteditor öffnen, aber ein Binärformat wie JPEG oder eine Windows-.exe oder eine .zip-Datei enthält nicht druckbare Zeichen, die viele Texteditoren zerstören oder unerwünschtes Verhalten verursachen können. Versuchen Sie cat file.jpg zum Beispiel. Jede xml- oder json-Datei ist dagegen zu 100 % druckbar. Ich denke also, dass Stijn de Witts Argumente stichhaltig sind, auch wenn es jetzt zu spät ist, sie zu ändern.

7 Stimmen

@XP84 Sie können jede Binärdatei mit einem Texteditor im HEX-Format öffnen. Und all die verschiedenen Zeichen (die 16) sind zu 100% druckbar. Also, nach dieser Logik... Sind alle Binärdateien Text? Json ist kein Text. Json ist (Warnung: informelle lose Definition voraus) eine Textdarstellung eines Objekts (oder einer Reihe von Objekten)

1011voto

Alix Axel Punkte 146320

Für JSON:

Content-Type: application/json

Für JSON-P :

Content-Type: application/javascript

67 Stimmen

JSONP ist nicht wirklich JSON aber, es ist eine Technik für die Übergabe eines JavaScript-Objekt literal

688voto

Mikhail.Mamaev Punkte 7699

Der korrekte MIME-Medientyp für JSON ist natürlich application/json Es ist jedoch notwendig zu wissen, welche Art von Daten in Ihrer Anwendung erwartet wird.

Ich verwende zum Beispiel Ext. GWT und die Antwort des Servers muss wie folgt lauten text/html sondern enthält JSON-Daten.

Klientenseite, Ext GWT-Formular-Listener

uploadForm.getForm().addListener(new FormListenerAdapter()
{
    @Override
    public void onActionFailed(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Error");
    }

    @Override
    public void onActionComplete(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Success");
    }
});

Im Falle der Verwendung von anwendung/json Antworttyp, schlägt mir der Browser vor, die Datei zu speichern.

_Serverseitiger Quellcodeausschnitt mit Spring MVC_

return new AbstractUrlBasedView() 
{
    @SuppressWarnings("unchecked")
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                                           HttpServletResponse response) throws Exception 
    {
        response.setContentType("text/html");
        response.getWriter().write(json);
    }
};

9 Stimmen

Die Antwort des Servers muss im Format text/html erfolgen. Dies gilt auch für die ExtJS-Variante.

510voto

Bhavin Punkte 27005

JSON:

Die Antwort besteht aus dynamisch generierten Daten, die sich nach den in der URL übergebenen Abfrageparametern richten.

{ "Name": "Foo", "Id": 1234, "Rank": 7 }

Inhalt-Typ: application/json


JSON-P:

JSON mit Auffüllung. Die Antwort sind JSON-Daten, die von einem Funktionsaufruf umgeben sind.

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

Inhalt-Typ: application/javascript

51 Stimmen

Die Definition von JSON ist falsch. Es muss nicht dynamisch generiert werden oder Abfrageparameter berücksichtigen. Sie können eine statische JSON-Datei bereitstellen. Außerdem enthält die am häufigsten hochgestimmte Antwort einen Link zum RFC.

11 Stimmen

Auch JSONP können json-Daten sein, die einer var.

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