Domanda Qual è il tipo di contenuto JSON corretto?


Sono stato in giro con JSON  per un po 'di tempo, solo spingerlo fuori come testo e non ha ferito nessuno (che io sappia), ma mi piacerebbe iniziare a fare le cose correttamente.

ho visto così  molti "standard" presunti per il tipo di contenuto JSON:

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

Ma quale è corretto, o meglio? Considero che ci sono problemi di sicurezza e di supporto del browser che variano tra di loro.

So che c'è una domanda simile, Quale tipo MIME se JSON viene restituito da un'API REST? , ma mi piacerebbe una risposta leggermente più mirata.


9190
2018-01-25 15:25


origine


risposte:


Per il testo JSON:

application/json

Il tipo di supporto MIME per il testo JSON è application/json. La codifica predefinita è UTF-8. (Fonte: RFC 4627 ).

Per JSONP  (javascript eseguibile) con callback:

application/javascript

Ecco alcuni post sui blog che sono stati menzionati nei commenti che sono rilevanti.


9160
2018-01-25 15:27



IANA  ha registrato il tipo MIME ufficiale per JSON come application/json.

Alla domanda sul perché no text/json, Sembra che Crockford abbia detto che JSON non è realmente JavaScript né testo e che anche IANA avrebbe avuto maggiori probabilità di distribuirlo application/* di text/*.

Altre risorse:


1471
2018-04-07 04:32



Per JSON:

Content-Type: application/json

Per JSON-P :

Content-Type: application/javascript

785
2018-06-20 03:10



Ovviamente, il tipo di supporto MIME corretto per JSON è application/json, ma è necessario rendersi conto di quale tipo di dati è previsto nella propria applicazione.

Ad esempio, io uso Ext GWT  e la risposta del server deve andare come text / html  ma contiene dati JSON.

Lato client, listener di moduli GWT Ext

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 caso di utilizzo application / json  tipo di risposta, il browser mi suggerisce di salvare il file.

Snippet di codice sorgente lato server utilizzando 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);
    }
};

584
2017-10-07 14:35



JSON:

La risposta è dati generati dinamicamente, in base ai parametri della query passati nell'URL.

Esempio:

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

Tipo di contenuto:   application/json


JSON-P:

JSON con imbottitura. La risposta è dati JSON, con una chiamata di funzione avvolta attorno ad esso.

Esempio:

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

Tipo di contenuto:   application/javascript


427
2018-03-28 07:54



Se stai usando Ubuntu o Debian e servi file .json tramite Apache, potresti voler servire i file con il tipo di contenuto corretto. Lo sto facendo principalmente perché voglio usare l'estensione per Firefox JSONView

Il modulo Apache mod_mime  aiuterà a farlo facilmente. Tuttavia, con Ubuntu è necessario modificare il file /etc/mime.types  e aggiungi la linea

application/json json

Quindi riavvia Apache:

sudo service apache2 restart

372
2017-11-16 22:58



Se stai chiamando i servizi Web ASP.NET dal lato client che devi utilizzare application/json perché funzioni. Credo che questo sia lo stesso per il jQuery  e Ext  quadri.


361
2018-01-25 15:31



Il tipo di contenuto giusto per JSON è application/jsonA MENO CHE tu stia usando JSONP , noto anche come JSON con Padding, che in realtà è JavaScript e quindi il tipo di contenuto giusto sarebbe application/javascript.


287
2018-04-12 04:00



Non c'è dubbio che application/json è il migliore MIMO  digitare per una risposta JSON.

Ma avevo qualche esperienza in cui dovevo usare application/x-javascript a causa di alcuni problemi di compressione. Il mio ambiente di hosting è l'hosting condiviso con Vai papà . Non mi permettono di cambiare le configurazioni del server. Ho aggiunto il seguente codice al mio web.config file per la compressione delle risposte.

<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"/>

Usando questo, le pagine .aspx erano compresse con g-zip ma le risposte JSON no. Ho aggiunto

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

nelle sezioni dei tipi statici e dinamici. Ma questo non comprime le risposte JSON.

Successivamente ho rimosso questo tipo appena aggiunto e aggiunto

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

in entrambe le sezioni di tipi statici e dinamici e modificato il tipo di risposta in

.ashx (gestore asincrono) a

application/x-javascript

E ora ho scoperto che le mie risposte JSON erano compresse con g-zip. Quindi personalmente raccomando di usare

application/x-javascript

solo se si desidera comprimere le risposte JSON su a ambiente di hosting condiviso . Perché nell'hosting condiviso, non ti permettono di cambiare IIS  configurazioni.


277
2018-04-18 08:22



Solo durante l'utilizzo application/json come il MIMO  tipo I ho il seguente (a partire da novembre 2011 con le versioni più recenti di Chrome, Firefox con Firebug ):

  • Non più avvisi da Chrome quando il JSON viene caricato dal server.
  • Firebug aggiungerà una scheda alla risposta che mostra i dati JSON formattato. Se il tipo MIME è diverso, verrà visualizzato come "Contenuto della risposta".

252
2017-11-30 06:42