Pertanyaan Apa jenis konten JSON yang benar?


Saya telah main-main dengan JSON untuk beberapa waktu, hanya mendorongnya sebagai teks dan tidak menyakiti siapa pun (yang saya tahu), tapi saya ingin mulai melakukan sesuatu dengan benar.

saya sudah melihat begitu banyak "standar" yang diakui untuk jenis konten JSON:

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

Tetapi mana yang benar, atau yang terbaik? Saya mengumpulkan bahwa ada masalah keamanan dan dukungan browser yang bervariasi di antara mereka.

Saya tahu ada pertanyaan serupa, Apa jenis MIME jika JSON dikembalikan oleh REST API?, tapi saya menginginkan jawaban yang sedikit lebih tepat sasaran.


9191
2018-01-25 15:25


asal


Jawaban:


Untuk teks JSON:

application/json

Jenis media MIME untuk teks JSON adalah application/json. Encoding default adalah UTF-8. (Sumber: RFC 4627).

Untuk JSONP (javascript runnable) dengan callback:

application/javascript

Berikut beberapa posting blog yang disebutkan di komentar yang relevan.


9162
2018-01-25 15:27



IANA telah mendaftarkan Tipe MIME resmi untuk JSON sebagai application/json.

Ketika ditanya tentang mengapa tidak text/json, Crockford tampaknya telah mengatakan JSON tidak benar-benar JavaScript atau teks dan juga IANA lebih mungkin untuk membagikannya application/* dari text/*.

Lebih banyak sumber daya:


1472
2018-04-07 04:32



Untuk JSON:

Content-Type: application/json

Untuk JSON-P:

Content-Type: application/javascript

785
2018-06-20 03:10



Tentu saja, jenis media MIME yang benar untuk JSON adalah application/json, tetapi perlu untuk menyadari jenis data apa yang diharapkan dalam aplikasi Anda.

Sebagai contoh, saya gunakan Ext GWT dan respons server harus berjalan sebagaimana mestinya teks / html tetapi berisi data JSON.

Sisi klien, pendengar formulir Ext GWT

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

Dalam kasus menggunakan aplikasi / json tipe respons, browser menyarankan saya untuk menyimpan file.

Snipet kode sumber sisi server menggunakan 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:

Respons adalah data yang dihasilkan secara dinamis, sesuai dengan parameter kueri yang diteruskan di URL.

Contoh:

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

Jenis konten:  application/json


JSON-P:

JSON dengan padding. Respons adalah data JSON, dengan panggilan fungsi melilitnya.

Contoh:

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

Jenis konten:  application/javascript


427
2018-03-28 07:54



Jika Anda menggunakan Ubuntu atau Debian dan Anda melayani file .json melalui Apache, Anda mungkin ingin melayani file dengan jenis konten yang benar. Saya melakukan ini terutama karena saya ingin menggunakan ekstensi Firefox JSONView

Modul Apache mod_mime akan membantu melakukan ini dengan mudah. Namun, dengan Ubuntu Anda perlu mengedit file /etc/mime.types dan tambahkan garis

application/json json

Kemudian restart Apache:

sudo service apache2 restart

372
2017-11-16 22:58



Jika Anda menelepon ASP.NET Web Services dari sisi-klien yang harus Anda gunakan application/json agar berhasil. Saya percaya ini sama untuk jQuery dan Ext kerangka kerja.


361
2018-01-25 15:31



Jenis konten yang tepat untuk JSON adalah application/jsonKECUALI Anda gunakan JSONP, juga dikenal sebagai JSON dengan Padding, yang sebenarnya adalah JavaScript dan jenis konten yang tepat application/javascript.


287
2018-04-12 04:00