Saya telah bermain-main dengan JSON selama beberapa waktu, hanya mendorongnya keluar sebagai teks dan tidak menyakiti siapa pun (yang saya tahu), tetapi saya ingin mulai melakukan hal-hal dengan benar.
Saya telah melihat begitu banyak "standar" yang diakui untuk tipe konten JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Tapi mana yang benar, atau yang terbaik? Saya mengetahui bahwa ada masalah keamanan dan dukungan browser yang beragam di antara mereka.
Saya tahu ada pertanyaan serupa, Apa tipe MIME jika JSON dikembalikan oleh API REST? , tapi saya ingin jawaban yang sedikit lebih bertarget.
IANA telah mendaftarkan Tipe MIME resmi untuk JSON sebagai
application/json
.Ketika ditanya tentang mengapa tidak
text/json
, Crockford tampaknya mengatakan JSON tidak benar-benar JavaScript atau teks dan juga IANA lebih mungkin untuk membagikanapplication/*
daripadatext/*
.Sumber lainnya:
sumber
text/*
bagian di hari-hari awal yang mungkin akan dimasukkan keapplication/*
bagian hari ini.cat file.jpg
misalnya. Sedangkan file xml atau json adalah 100% dapat dicetak. Jadi saya pikir poin Stijn de Witt adalah valid, terlepas dari kenyataan bahwa ya, sudah terlambat untuk berubah sekarang.x
karakter huruf kecil. Bukan 78. JSON adalah teks dengan cara yang persis sama dengan HTML (teks / html). Ini hanya berisi karakter teks yang dapat dibaca, dengan makna terstruktur di dalamnya.Untuk JSON:
Untuk JSON-P :
sumber
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 menggunakan Ext GWT dan respons server harus berupa teks / html tetapi berisi data JSON.
Sisi klien, pendengar formulir Ext GWT
Dalam hal menggunakan aplikasi / json tipe respons , browser menyarankan saya untuk menyimpan file.
Cuplikan kode sumber sisi server menggunakan Spring MVC
sumber
JSON:
Respons adalah data yang dihasilkan secara dinamis, sesuai dengan parameter kueri yang diteruskan dalam URL.
Contoh:
Jenis konten:
application/json
JSON-P:
JSON dengan bantalan. Respons adalah data JSON, dengan panggilan fungsi yang melingkupinya.
Contoh:
Jenis konten:
application/javascript
sumber
Jika Anda menggunakan Ubuntu atau Debian dan Anda menyajikan file .json melalui Apache, Anda mungkin ingin menyajikan file dengan tipe konten yang benar. Saya melakukan ini terutama karena saya ingin menggunakan JSONView ekstensi Firefox
Modul Apache mod_mime akan membantu melakukan ini dengan mudah. Namun, dengan Ubuntu Anda perlu mengedit file /etc/mime.types dan menambahkan baris
Kemudian restart Apache:
sumber
Jika Anda memanggil Layanan Web ASP.NET dari sisi klien, Anda harus menggunakannya
application/json
agar berfungsi. Saya percaya ini sama untuk kerangka kerja jQuery dan Ext .sumber
content-Type: text/plain
,content-Type: application/json
,content-Type: application/json; charset=UTF-8
,contentType: "application/x-www-form-urlencoded; charset=UTF-8"
Jenis konten yang tepat untuk JSON adalah
application/json
KECUALI Anda menggunakan JSONP , juga dikenal sebagai JSON dengan Padding, yang sebenarnya JavaScript dan jenis konten yang tepatapplication/javascript
.sumber
Tidak ada keraguan bahwa itu
application/json
adalah MIME terbaik tipe untuk respons JSON.Tapi saya punya pengalaman di mana saya harus menggunakan
application/x-javascript
karena beberapa masalah kompresi. Lingkungan hosting saya adalah shared hosting dengan GoDaddy . Mereka tidak mengizinkan saya untuk mengubah konfigurasi server. Saya telah menambahkan kode berikut keweb.config
file saya untuk mengompres respons.Dengan menggunakan ini, halaman .aspx dikompres dengan g-zip tetapi respons JSON tidak. saya tambahkan
di bagian tipe statis dan dinamis. Tapi ini tidak mengompres respons JSON sama sekali.
Setelah itu saya menghapus jenis yang baru ditambahkan ini dan menambahkan
di bagian tipe statis dan dinamis, dan mengubah tipe respons di
.ashx (penangan asinkron) ke
Dan sekarang saya menemukan bahwa respons JSON saya dikompres dengan g-zip. Jadi saya pribadi merekomendasikan untuk menggunakan
hanya jika Anda ingin mengompres respons JSON Anda di lingkungan hosting bersama . Karena dalam shared hosting, mereka tidak memungkinkan Anda untuk mengubah konfigurasi IIS .
sumber
application/json
, saya memanfaatkan itu pada saya shared hosting dan saya tidak akan menyarankan menggunakan jenis konten yang berbeda untuk mengaktifkan kompresi pula, itu hanya salah. Itu bisa dilakukan, tetapi masih akan salah. Menggunakan tipe konten berbeda untuk dukungan browser adalah satu hal, menggunakan tipe konten berbeda untuk kompresi sisi server adalah hal lain.Hanya ketika menggunakan
application/json
sebagai tipe MIME saya memiliki yang berikut (per November 2011 dengan versi Chrome terbaru, Firefox dengan Firebug ):sumber
Tidak semuanya berfungsi untuk tipe konten
application/json
.Jika Anda menggunakan formulir Ext JS , kirim untuk mengunggah file, ketahuilah bahwa respons server diuraikan oleh browser untuk membuat dokumen untuk
<iframe>
.Jika server menggunakan JSON untuk mengirim objek kembali, maka
Content-Type
header harus diatur ketext/html
untuk memberitahu browser untuk memasukkan teks tidak berubah ke dalam badan dokumen.Lihat dokumentasi API Ext JS 3.4.0 .
sumber
application/json
per spec.iframe
tampaknya apiload
acara untukapplication/javascript
,application/x-javascript
,text/javascript
,text/plain
, tapi tidak menembak untukapplication/json
jugatext/html
. Pada hari ini, Android <= 2.3 adalah Sekitar 50% dari pangsa pasar Android.JSON adalah bahasa khusus domain (DSL) dan format data independen dari JavaScript, dan karenanya memiliki jenis MIME sendiri
application/json
,. Menghormati tipe MIME tentu saja didorong oleh klien, jaditext/plain
mungkin dilakukan untuk transfer byte, tetapi kemudian Anda akan mendorong interpretasi ke domain aplikasi vendor secara tidak perlu -application/json
. Apakah Anda akan mentransfer XML melaluitext/plain
?Tapi sejujurnya, pilihan tipe MIME Anda adalah saran kepada klien tentang cara menafsirkan data -
text/plain
atautext/HTML
(jika bukan HTML) seperti tipe penghapusan - sama tidak informatifnya dengan membuat semua objek Anda mengetik Objek dalam bahasa yang diketik.Tidak ada runtime browser yang saya tahu akan mengambil dokumen JSON dan secara otomatis membuatnya tersedia untuk runtime sebagai objek yang dapat diakses JavaScript tanpa intervensi, tetapi jika Anda bekerja dengan klien yang lumpuh, itu masalah yang sama sekali berbeda. Tapi itu bukan keseluruhan cerita - RESTful layanan JSON sering tidak memiliki runtime JavaScript, tetapi tidak menghentikan mereka menggunakan JSON sebagai format pertukaran data yang layak. Jika klien lumpuh ... maka saya akan mempertimbangkan mungkin injeksi HTML melalui layanan templating Ajax sebagai gantinya.
Aplikasi / JSON!
sumber
Jika Anda berada di lingkungan sisi klien, menyelidiki tentang dukungan lintas-browser wajib untuk aplikasi web yang didukung dengan baik.
Tipe Konten HTTP yang benar adalah
application/json
, karena yang lain juga telah disorot, tetapi beberapa klien tidak menanganinya dengan baik, itu sebabnya jQuery merekomendasikan defaulttext/html
.sumber
Jawaban yang benar adalah:
sumber
Seperti yang banyak orang lain katakan,
application/json
adalah jawaban yang benar.Tetapi apa yang belum dijelaskan adalah apa arti opsi lain yang Anda usulkan.
application/x-javascript
: Jenis MIME eksperimental untuk JavaScript sebelumapplication/javascript
dibuat standar.text/javascript
: Sekarang sudah usang. Anda harus menggunakanapplication/javascript
saat menggunakan javascript.text/x-javascript
: Jenis MIME eksperimental untuk situasi di atas.text/x-json
: Jenis MIME eksperimental untuk JSON sebelumapplication/json
didaftarkan secara resmi.Semua dalam semua, setiap kali Anda ragu tentang jenis konten, Anda harus memeriksa tautan ini
sumber
text/javascript
menjadi usang? Saya masih mengisi dokumen HTML dengan<script type="text/javascript" ...
tag.type="text/javascript"
dan lakukan<script>...</script>
setidaknya sesuai dengan HTML5.Di JSP , Anda dapat menggunakan ini dalam arahan halaman:
Jenis media MIME yang benar untuk JSON adalah
application/json
. JSP akan menggunakannya untuk mengirim respons ke klien.sumber
"
application/json
" Adalah jenis konten JSON yang benar.sumber
The pendaftaran IANA untuk
application/json
mengatakanAnda akan melihat bahwa IANA.org tidak mencantumkan jenis media lain ini , bahkan
application/javascript
sekarang sudah usang. Jadiapplication/json
benar-benar satu-satunya jawaban yang mungkin benar .Dukungan browser adalah hal lain.
Jenis media non-standar yang paling banyak didukung adalah
text/json
atautext/javascript
. Tetapi beberapa nama besar bahkan digunakantext/plain
.Yang lebih aneh adalah header Tipe-Konten yang dikirim oleh Flickr, yang mengembalikan JSON sebagai
text/xml
. Google menggunakantext/javascript
beberapa apis ajax.Contoh:
Keluaran:
Content-Type: text/javascript
Keluaran:
Content-Type: text/xml
sumber
Jenis MIME yang tepat adalah
application/json
TAPI
Saya mengalami banyak situasi di mana jenis browser atau kerangka kerja yang dibutuhkan pengguna:
sumber
Saya menggunakan di bawah ini
sumber
The Content-Type header yang harus ditetapkan ke ' aplikasi / json ' ketika posting. Server yang mendengarkan permintaan harus menyertakan " Terima = aplikasi / json ". Di Spring MVC Anda dapat melakukannya seperti ini:
Tambahkan tajuk ke respons:
sumber
Di musim semi Anda memiliki tipe yang ditentukan:
MediaType.APPLICATION_JSON_VALUE
yang setara dengan application / json .sumber
Saya menggunakan kode ini untuk memasukkan data ke JSON di Google Cloud Storage (GCS) yang diatur agar dapat dilihat secara publik :
Untuk mendapatkan kembali data secara langsung:
sumber
Jika JSON dengan bantalan maka itu akan menjadi
application/jsonp
. Jika JSON tanpa bantalan maka itu akan menjadiapplication/json
.Untuk menangani keduanya, ini adalah praktik yang baik untuk menggunakan: 'application / javascript' tanpa peduli apakah itu dengan padding atau tanpa padding.
sumber
Untuk JSON, saya menggunakan:
Ini dijelaskan dalam proposal Format Pertukaran Data JSON IETF 7158, Bagian 1.2: Spesifikasi JSON .
sumber
Memperluas respons yang diterima, saat Anda menggunakan JSON dalam konteks REST ...
Ada argumen kuat tentang penggunaan
application/x-resource+json
danapplication/x-collection+json
kapan Anda mewakili 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 ke sumber daya yang ditransfer membenarkan Jenis Konten yang lebih eksplisit daripada hanya
application/json
.Mengikuti alasan ini, konteks lain dapat membenarkan Tipe Konten yang lebih spesifik .
sumber
application/vnd.api+json
tampaknya khusus untuk apis menggunakan json: api , spesifikasi yang sangat sempit dengan harapan dan formatnya sendiri, saya tidak memahaminya untuk API apa pun yang mengembalikan json. Harap perbaiki saya jika saya salahPengembang PHP menggunakan ini:
sumber
Jika Anda mendapatkan data dari REST API di JSON maka Anda harus menggunakan tipe konten
sumber
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- javascriptContent-Type: text/javascript
- javascript TAPI usang, versi IE yang lebih lama digunakan untuk menggunakan atribut html.Content-Type: text/x-javascript
- Jenis Media JavaScript TETAPI usangContent-Type: text/x-json
- json sebelum aplikasi / json didaftarkan secara resmi.sumber
Format JSON (JavaScript Object Notation) dan JSONP ("JSON with padding") tampaknya sangat mirip dan karenanya mungkin sangat membingungkan jenis MIME mana yang harus mereka gunakan. Meskipun formatnya mirip, ada beberapa perbedaan kecil di antara mereka.
Jadi, kapan pun dalam keraguan, saya memiliki pendekatan yang sangat sederhana (yang berfungsi dengan sangat baik dalam kebanyakan kasus), yaitu, pergi dan periksa dokumen RFC yang sesuai.
JSON RFC 4627 (Aplikasi / json Media Type untuk JavaScript Object Notation (JSON)) adalah spesifikasi format JSON. Dikatakan di bagian 6, bahwa jenis media MIME untuk teks JSON adalah
JSONP JSONP ("JSON with padding") ditangani dengan cara yang 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,text/javascript
tipe MIME akan berfungsi dengan baik juga.Catatan yang
text/javascript
telah ditandai sebagai usang oleh dokumen RFC 4329 (Jenis Media Scripting) dan disarankan untuk menggunakanapplication/javascript
jenis. Namun, karena alasan warisan,text/javascript
masih banyak digunakan dan memiliki dukungan lintas-browser (yang tidak selalu merupakan kasus denganapplication/javascript
tipe MIME, terutama dengan browser yang lebih lama).sumber