Vraag Wat is het juiste JSON-inhoudstype?


Ik heb wat aan het rotzooien gehad JSON al een tijdje, het gewoon uitduwen als tekst en het heeft niemand kwaad gedaan (dat weet ik wel), maar ik wil graag dingen goed doen.

ik heb gezien zo veel beweerde "standaarden" voor het inhoudstype van JSON:

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

Maar wat is correct of het beste? Ik constateer dat er problemen zijn met de ondersteuning van de beveiliging en de browser, die tussen hen verschillen.

Ik weet dat er een soortgelijke vraag is, Welk MIME-type als JSON wordt geretourneerd door een REST-API?, maar ik zou graag een iets gerichter antwoord willen.


9191
2018-01-25 15:25


oorsprong


antwoorden:


Voor JSON-tekst:

application/json

Het MIME-mediatype voor JSON-tekst is application/json. De standaard codering is UTF-8. (Bron: RFC 4627).

Voor JSONP (runnable javascript) met callback:

application/javascript

Hier zijn enkele blogberichten die in de opmerkingen werden genoemd die relevant zijn.


9162
2018-01-25 15:27



IANA heeft het officiële MIME Type voor JSON geregistreerd als application/json.

Op de vraag waarom niet text/json, Lijkt Crockford te hebben gezegd dat JSON niet echt JavaScript of tekst is en dat IANA ook vaker uitdeelt application/* dan text/*.

Meer middelen:


1472
2018-04-07 04:32



Voor JSON:

Content-Type: application/json

Voor JSON-P:

Content-Type: application/javascript

785
2018-06-20 03:10



Natuurlijk is het juiste MIME-mediatype voor JSON dat wel application/json, maar het is noodzakelijk om te realiseren welk type gegevens wordt verwacht in uw toepassing.

Ik gebruik bijvoorbeeld Ext GWT en de serverreactie moet gaan zoals text / html maar bevat JSON-gegevens.

Client kant, Ext GWT vorm luisteraar

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");
    }
});

In het geval van gebruik application / json antwoordtype, stelt de browser mij voor om het bestand op te slaan.

Source-codefragment aan de serverzijde met Lente 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:

Respons is dynamisch gegenereerde gegevens, volgens de queryparameters die in de URL zijn doorgegeven.

Voorbeeld:

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

Content-Type:  application/json


JSON-P:

JSON met vulling. Reactie is JSON-gegevens, met een functieaanroep eromheen gewikkeld.

Voorbeeld:

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

Content-Type:  application/javascript


427
2018-03-28 07:54



Als u Ubuntu of Debian gebruikt en u .json-bestanden via Apache serveert, wilt u mogelijk de bestanden met het juiste inhoudstype weergeven. Ik doe dit voornamelijk omdat ik de Firefox-extensie wil gebruiken JSONView

De Apache-module mod_mime zal dit gemakkelijk helpen. Met Ubuntu moet je het bestand echter bewerken /etc/mime.types en voeg de regel toe

application/json json

Start dan Apache opnieuw:

sudo service apache2 restart

372
2017-11-16 22:58



Als u ASP.NET Web Services vanaf de client-kant belt, moet u dit gebruiken application/json om het te laten werken. Ik geloof dat dit hetzelfde is voor de jQuery en Ext kaders.


361
2018-01-25 15:31



Het juiste inhoudstype voor JSON is application/jsonTENZIJ je gebruikt JSONP, ook bekend als JSON met Padding, wat eigenlijk JavaScript is en dus het juiste inhoudstype zou zijn application/javascript.


287
2018-04-12 04:00



Er is geen twijfel dat application/json is de beste MIME type voor een JSON-antwoord.

Maar ik had wat ervaring waar ik moest gebruiken application/x-javascript vanwege een aantal compressieproblemen. Mijn hostingomgeving is shared hosting met GoDaddy. Ze staan ​​mij niet toe om serverconfiguraties te veranderen. Ik had de volgende code aan mijn toegevoegd web.config bestand voor het comprimeren van antwoorden.

<httpCompression>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Door dit te gebruiken, werden de .aspx-pagina's gecomprimeerd met g-zip maar JSON-antwoorden niet. ik voegde toe

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

in de secties static en dynamic types. Maar dit comprimeert helemaal geen JSON-antwoorden.

Hierna heb ik dit nieuw toegevoegde type verwijderd en toegevoegd

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

in zowel de statische als de dynamische secties en veranderde het antwoordtype in

.ashx (asynchrone handler) voor

application/x-javascript

En nu ontdekte ik dat mijn JSON-antwoorden waren gecomprimeerd met g-zip. Dus ik persoonlijk aanbevelen om te gebruiken

application/x-javascript

alleen als u uw JSON-antwoorden wilt comprimeren op a gedeelde hostingomgeving. Omdat ze je in shared hosting niet toestaan ​​om te veranderen IIS configuraties.


277
2018-04-18 08:22



Alleen bij gebruik application/json als de MIME type Ik heb het volgende (vanaf november 2011 met de meest recente versies van Chrome, Firefox met Firebug):

  • Geen waarschuwingen meer van Chrome wanneer de JSON vanaf de server wordt geladen.
  • Firebug voegt een tabblad toe aan het antwoord met de JSON-gegevens geformatteerd. Als het MIME-type anders is, wordt het alleen weergegeven als 'Reactie-inhoud'.

252
2017-11-30 06:42



Niet alles werkt voor het inhoudstype application/json.

Als je gebruikt Ext JS formulier verzenden om het bestand te uploaden, houd er rekening mee dat het serverantwoord door de browser wordt geparseerd om het document voor de te maken <iframe>.

Als de server JSON gebruikt om het retourobject te verzenden, dan is de Content-Type kop moet worden ingesteld op text/html om de browser te laten weten dat de tekst ongewijzigd in de documenttekst moet worden ingevoegd.

Zien de Ext JS 3.4.0 API-documentatie.


229
2017-09-07 02:41