Apa jenis konten JSON yang benar?

Saya menghabiskan beberapa waktu bermain-main dengan JSON , hanya mendorongnya keluar sebagai teks, dan itu tidak menyakiti siapa pun (yang saya tahu), tetapi saya ingin mulai melakukan hal-hal yang benar.

Saya telah melihat begitu banyak dugaan "standar" untuk tipe konten JSON:

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

Tetapi apa yang benar atau lebih baik? Saya mengerti bahwa di antara mereka ada masalah keamanan dan dukungan browser.

Saya tahu ada pertanyaan serupa. Apa tipe MIME jika JSON dikembalikan oleh REST API? tapi saya ingin jawaban yang sedikit lebih fokus.

9470
25 янв. diatur oleh Oli 25 Jan 2009-01-25 18:25 '09 pada 18:25 2009-01-25 18:25
@ 38 jawaban
  • 1
  • 2

Untuk teks JSON:

application/json

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

Untuk JSONP (javascript yang dapat dieksekusi) dengan panggilan balik:

application/javascript

Berikut adalah beberapa posting blog yang disebutkan dalam komentar yang relevan dengan kasus ini.

9468
25 янв. Gumbo menjawab 25 Jan 2009-01-25 18:27 '09 pada 18:27 2009-01-25 18:27

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

Ketika ditanya tentang mengapa bukan text/json , Crockford tampaknya mengatakan bahwa JSON sebenarnya bukan JavaScript, tetapi teks, dan IANA lebih cenderung untuk melewatkan application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Dengan menggunakan ini, halaman .aspx dikompres dengan g-zip, tetapi respons JSON tidak. Saya menambahkan

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

di bagian tipe statis dan dinamis. Tapi ini tidak memampatkan respons JSON sama sekali.

Setelah itu, saya menghapus jenis baru yang ditambahkan ini dan menambahkan

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

di bagian tipe statis dan dinamis dan mengubah tipe respons di

.ashx (penangan tidak sinkron) aktif

 application/x-javascript 

Dan sekarang saya menemukan bahwa respons JSON saya dikompresi g-zip. Karena itu, saya pribadi merekomendasikan untuk menggunakan

 application/x-javascript 

hanya jika Anda ingin mengompres respons JSON Anda di lingkungan hosting publik . Karena mereka tidak memungkinkan Anda untuk mengubah konfigurasi IIS pada hosting bersama.

282
18 апр. jawabannya diberikan oleh shashwat 18 April. 2012-04-18 11:22 '12 pada 11:22 2012-04-18 11:22

Hanya ketika menggunakan application/json sebagai MIME saya memiliki yang berikut (sejak November 2011 dengan versi Chrome terbaru, Firefox dengan Firebug ):

  • Tidak ada lagi peringatan dari Chrome saat mengunduh JSON dari server.
  • Firebug akan menambahkan tab ke respons yang menunjukkan Anda data yang diformat JSON. Jika jenis MIME berbeda, itu akan ditampilkan sebagai "Konten Respons".
257
30 нояб. Jawabannya diberikan oleh Ivo Limmen 30 Nov. 2011-11-30 09:42 '11 pada 9:42 2011-11-30 09:42

Tidak semuanya berfungsi untuk application/json tipe konten application/json .

Jika Anda menggunakan Ext JS untuk mengirim file, perlu diingat bahwa respons server dianalisis oleh browser untuk membuat dokumen untuk <iframe> .

Jika server menggunakan JSON untuk mengirim objek yang dikembalikan, maka header Content-Type harus diatur ke text/html untuk memberitahu browser untuk memasukkan teks tanpa perubahan ke dalam tubuh dokumen.

Lihat dokumentasi API Ext JS 3.4.0 .

232
07 сент. Conan menjawab 07 Sep 2011-09-07 05:41 '11 pada 5:41 pagi 2011-09-07 05:41

JSON adalah bahasa domain (DSL) dan format data yang tidak tergantung pada JavaScript, dan karenanya memiliki MIME , application/json . Menghormati tipe MIME, tentu saja, tergantung pada klien, sehingga text/plain dapat dilakukan untuk mentransfer byte, tetapi kemudian Anda tidak akan perlu menafsirkan interpretasi domain dari penyedia application/json - application/json . Apakah Anda lulus XML melalui text/plain ?

Tapi sejujurnya, pilihan Anda dari tipe MIME adalah saran untuk klien tentang bagaimana menafsirkan data - text/plain atau text/HTML (ketika bukan HTML) —seperti menghapus gaya - itu tidak informatif, seperti membuat semua Objek Anda pada yang diketik bahasa

Kurangnya waktu eksekusi browser, yang saya tahu akan mengambil dokumen JSON dan secara otomatis membuatnya tersedia untuk runtime sebagai objek yang dapat diakses oleh JavaScript, tanpa intervensi, tetapi jika Anda bekerja dengan klien yang lumpuh, itu masalah lain. Tapi ini bukan keseluruhan cerita. Layanan tenang JSON sering tidak memiliki otonomi JavaScript, tetapi ini tidak mencegah mereka menggunakan JSON sebagai format pertukaran data yang layak. Jika pe>Ajax .

Aplikasi / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 jawabannya diberikan oleh VLostBoy 15 Mei '12 pada 1:19 2012-05-15 01:19

Jika Anda berada di lingkungan sisi klien, penelitian dukungan lintas-browser diperlukan untuk aplikasi web yang didukung dengan baik.

Tipe Konten HTTP yang benar adalah application/json , karena yang lain sudah dialokasikan juga, tetapi beberapa klien tidak menangani ini dengan sangat baik, jadi jQuery merekomendasikan menggunakan text/html default.

201
27 апр. Jawabannya diberikan oleh Emanuele Del Grande 27 Apr. 2012-04-27 19:27 '12 pada 19:27 2012-04-27 19:27

Jawaban yang benar adalah:

 Content-Type: application/json 
159
31 дек. jawabannya diberikan oleh Irfan DANISH 31 des. 2012-12-31 09:29 '13 pada 9:29 2012-12-31 09:29

Seperti banyak orang lain, application/json adalah jawaban yang tepat.

Namun belum dijelaskan apa arti opsi lain yang Anda tawarkan.

  • application/x-javascript : Jenis MIME eksperimental untuk JavaScript sebelum application/javascript standar.

  • text/javascript : sekarang tidak digunakan lagi. Anda harus menggunakan application/javascript saat menggunakan javascript.

  • text/x-javascript : Jenis MIME eksperimental untuk situasi di atas.

  • text/x-json : jenis MIME eksperimental untuk JSON sebelum application/json menerima pendaftaran resmi.

Secara umum, setiap kali Anda ragu tentang jenis konten, Anda harus memeriksa tautan ini.

156
02 апр. jawabannya diberikan fcm 02 Apr 2013-04-02 14:10 '13 pada 14:10 2013-04-02 14:10

Di JSP, Anda dapat menggunakan ini di halaman direktif:

 <%@ page > 

Jenis MIME yang benar untuk JSON adalah application/json . JSP akan menggunakannya untuk mengirim respons ke klien.

139
19 янв. jawabannya diberikan raja 19 januari. 2013-01-19 11:22 '13 pada 11:22 2013-01-19 11:22

" application/json " adalah jenis konten JSON yang benar.

 def ajaxFindSystems = { def result = Systems.list() render(contentType:'application/json') { results { result.each{sys-> system(id:sys.id, name:sys.name) } } resultset (rows:result.size()) } } 
108
26 февр. Jawabannya diberikan oleh Sukane pada 26 Februari. 2013-02-26 14:55 '13 pada 14:55 2013-02-26 14:55

Pendaftaran IANA untuk application/json mengatakan

Aplikasi menggunakan tipe media ini: JSON digunakan untuk bertukar data antara aplikasi yang ditulis dalam semua bahasa pemrograman ini: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Anda akan melihat bahwa IANA.org tidak mencantumkan jenis media lain ini , bahkan application/javascript sudah usang. Dengan demikian, application/json adalah satu-satunya jawaban yang benar.

Dukungan browser adalah hal lain.

Jenis media non-standar yang paling umum adalah text/json atau text/javascript . Tetapi beberapa nama besar bahkan menggunakan text/plain .

Yang lebih aneh lagi adalah header Tipe-Konten yang dikirim oleh Flickr, yang mengembalikan JSON sebagai text/xml . Google menggunakan text/javascript untuk beberapa di antaranya ajax apis.

Contoh:

 curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0> 

Output: Content-Type: text/javascript

 curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo> 

Output: Content-Type: text/xml

98
12 февр. Balas diberikan oleh Jhawins 12 Feb 2014-02-12 19:12 '14 pada 19:12 2014-02-12 19:12

Jenis yang benar adalah application/json MIME application/json

TAPI

Saya telah mengalami banyak situasi ketika saya membutuhkan jenis browser atau pengguna kerangka kerja:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 jawabannya diberikan LombaX 03 Mei '13 pukul 19:00 2013-05-03 19:00

Saya menggunakan di bawah ini

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 jawabannya diberikan oleh Andro pada 16 Mei '13 pada 15:43 2013-05-16 15:43

Header header Tipe-Konten harus diatur ke aplikasi / json saat menerbitkan. Server yang mendengarkan permintaan harus menyertakan " Terima = aplikasi / json ". Di Spring MVC, Anda dapat melakukan ini sebagai berikut:

 @RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json") 

Tambahkan tajuk ke respons:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Balas diberikan oleh Alexander Burakevych 09 Agu. 2013-08-09 13:49 '13 pada 13:49 2013-08-09 13:49

Di musim semi , Anda memiliki tipe spesifik: MediaType.APPLICATION_JSON_VALUE , yang setara dengan application / json.

55
29 июня '13 в 11:34 2013-06-29 11:34 jawabannya diberikan oleh Chand Priyankara pada 29 Juni '13 pada 11:34 2013-06-29 11:34

application/json berfungsi dengan baik di PHP untuk menyimpan array atau objek data.

Saya menggunakan kode ini untuk memasukkan data ke JSON di Google Cloud Storage (GCS) , yang disediakan untuk publik untuk dilihat :

 $context = stream_context_create([ 'gs' => [ 'acl'=>'public-read', 'Content-Type' => 'application/json', ] ]); file_put_contents( "gs://BUCKETNAME/FILENAME.json", json_encode((object) $array), false, $context ); 

Untuk mengembalikan data secara >

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Jawabannya diberikan Chetabahana 01 Apr. 2015-04-01 19:13 '15 pada 19:13 2015-04-01 19:13

Untuk JSON saya menggunakan:

  Content-Type: application/json 

Ini dijelaskan dalam klausa Interchange Format Data IETF JSON 7158, Bagian 1.2: Spesifikasi JSON .

47
06 февр. Jawabannya diberikan oleh Mehmet_ 06 Feb. 2015-02-06 15:01 '15 pada 15:01 2015-02-06 15:01

Jika JSON diisi, itu akan menjadi application/jsonp . Jika JSON tidak memiliki add-on, itu akan menjadi application/json .

Untuk mengatasinya, disarankan untuk menggunakan: "application / javascript", tanpa khawatir tentang apakah itu dengan atau tanpa padding.

47
21 июня '13 в 18:22 2013-06-21 18:22 jawabannya diberikan oleh Ankit Zalani pada 21 Juni '13 pukul 6:22 2013-06-21 18:22

Perluasan respons yang diterima saat Anda menggunakan JSON dalam konteks REST ...

Ada argumen kuat yang kuat tentang penggunaan application/x-resource+json dan application/x-collection+json ketika Anda menyajikan sumber daya dan koleksi REST.

Dan jika Anda memutuskan untuk mengikuti spesifikasi jsonapi , Anda harus menggunakan application/vnd.api+json seperti yang didokumentasikan.

Meskipun tidak ada standar universal, jelas bahwa semantik yang ditambahkan dari sumber daya yang ditransfer membenarkan Jenis Konten yang lebih eksplisit daripada hanya application/json .

Mengikuti pertimbangan ini, konteks lain mungkin membenarkan Tipe Konten yang lebih spesifik.

40
09 июня '15 в 22:12 2015-06-09 22:12 jawabannya diberikan jgomo3 09 Juni, '15 pukul 10:12 2015-06-09 22:12

Pengembang PHP menggunakan ini:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 jawabannya diberikan oleh user3087089 29 Maret '14 di 8:43 2014-03-29 08:43

Jika Anda mendapatkan data dari REST API di JSON, maka Anda perlu menggunakan tipe konten

 For JSON data: Content-Type:application/json For HTML data: Content-Type:text/html, For XHTML data: Content-Type:application/xhtml+xml, For XML data: Content-Type:text/xml, application/xml 
37
11 апр. Balas diberikan oleh Krishna pada 11 Apr 2016-04-11 12:15 '16 jam 12:15 malam 2016-04-11 12:15

JSON (JavaScript Object Designation) dan JSONP ("JSON with padding") tampaknya sangat mirip, dan karena itu bisa sangat membingungkan jenis MIME apa yang harus mereka gunakan. Meskipun formatnya tampak sangat mirip, ada beberapa perbedaan kecil di antara mereka.

Karena itu, setiap kali saya ragu, saya memiliki pendekatan yang sangat sederhana (yang berfungsi dengan baik dalam kebanyakan kasus), yaitu, pergi dan periksa dokumen RFC yang sesuai.

JSON RFC 4627 (Jenis Aplikasi / Media json untuk Merancang Objek JavaScript (JSON)) adalah spesifikasi format JSON. Bagian 6 menyatakan bahwa tipe multimedia MIME untuk teks JSON

 application/json. 

JSONP JSONP ("JSON with add-on") diproses secara berbeda dari JSON di browser. JSONP diperlakukan sebagai skrip JavaScript biasa, dan karenanya harus menggunakan application/javascript, jenis MIME resmi saat ini untuk JavaScript. Namun, dalam banyak kasus, tipe MIME text/javascript akan berfungsi dengan baik.

Harap dicatat bahwa text/javascript ditandai sebagai RFC 4329 yang sudah ketinggalan zaman (Jenis Media Scripting), dan disarankan untuk menggunakan application/javascript sebagai gantinya. Namun, karena alasan bawaan, text/javascript masih banyak digunakan dan mendukung cross-browser (yang tidak selalu merupakan jenis application/javascript MIME, terutama di browser lama).

23
15 февр. jawaban yang diberikan oleh Iresha Rubasinghe pada 15 Feb. 2016-02-15 06:20 '16 pada 6:20 2016-02-15 06:20

Content-Type: application/json - JSON
Content-Type: application/javascript - json-P
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript, NAMUN ketinggalan zaman, versi IE yang lebih lama, dulu digunakan sebagai atribut html.
Content-Type: text/x-javascript - Jenis-Jenis Multimedia JavaScript TAPI Usang
Content-Type: text/x-json - json sebelum pendaftaran resmi aplikasi / json.

22

Pertanyaan lain tentang tag atau Ajukan pertanyaan