Frage Was ist der korrekte JSON-Inhaltstyp?


Ich habe mit rumgespielt JSON Seit einiger Zeit schieb ich es einfach als Text raus und es hat niemanden verletzt (von dem ich weiß), aber ich würde gerne anfangen, Dinge richtig zu machen.

ich habe gesehen damit viele angebliche "Standards" für den JSON-Inhaltstyp:

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

Aber was ist richtig oder am besten? Ich nehme an, dass es Probleme bei der Sicherheit und beim Browser 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.


9191
2018-01-25 15:25


Ursprung


Antworten:


Für JSON-Text:

application/json

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

Zum JSONP (runnable javascript) mit Callback:

application/javascript

Hier sind einige Blogposts, die in den relevanten Kommentaren erwähnt wurden.


9162
2018-01-25 15:27



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

Auf die Frage warum nicht text/json, Crockford scheint gesagt zu haben, JSON sei nicht wirklich JavaScript oder Text und auch IANA sei eher bereit, etwas zu verteilen application/* als text/*.

Mehr Ressourcen:


1472
2018-04-07 04:32



Für JSON:

Content-Type: application/json

Zum JSON-P:

Content-Type: application/javascript

785
2018-06-20 03:10



Natürlich ist der richtige MIME-Medientyp für JSON application/json, aber es ist notwendig zu erkennen, welche Art von Daten in Ihrer Anwendung erwartet wird.

Zum Beispiel benutze ich Ext GWT und die Serverantwort muss als gehen Text / HTML enthält jedoch JSON-Daten.

Client-Seite, Ext GWT-Form 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 Anwendung / json Antworttyp, der Browser schlägt mir vor, die Datei zu speichern.

Serverseitiges Quellcode-Snippet mit Frühling 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);
    }
};

584
2017-10-07 14:35



JSON:

Die Antwort besteht aus dynamisch generierten Daten gemäß den in der URL übergebenen Abfrageparametern.

Beispiel:

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

Inhaltstyp:  application/json


JSON-P:

JSON mit Auffüllung. Antwort ist JSON-Daten, mit einem Funktionsaufruf umwickelt.

Beispiel:

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

Inhaltstyp:  application/javascript


427
2018-03-28 07:54



Wenn Sie Ubuntu oder Debian verwenden und Sie .json-Dateien über Apache bereitstellen, möchten Sie möglicherweise die Dateien mit dem richtigen Inhaltstyp bereitstellen. Ich mache das hauptsächlich, weil ich die Firefox-Erweiterung verwenden möchte JSONView

Das Apache-Modul mod_mime wird dazu beitragen, dies leicht zu tun. Unter Ubuntu müssen Sie jedoch die Datei bearbeiten /etc/mime.types und füge die Zeile hinzu

application/json json

Dann starte Apache neu:

sudo service apache2 restart

372
2017-11-16 22:58



Wenn Sie die ASP.NET-Webdienste von der Clientseite aus aufrufen, müssen Sie sie verwenden application/json damit es funktioniert. Ich glaube, das ist das gleiche für die jQuery und Ext Rahmen.


361
2018-01-25 15:31



Der richtige Inhaltstyp für JSON ist application/jsonWenn Sie nicht verwenden JSONP, auch bekannt als JSON mit Padding, was eigentlich JavaScript ist und somit der richtige Inhaltstyp wäre application/javascript.


287
2018-04-12 04:00