it-swarm-id.com

Apa jenis konten JSON yang benar?

Saya telah bermain-main dengan JSON untuk 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 so banyak mengaku "standar" 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 bervariasi di antara mereka.

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

9670
Oli

Untuk teks JSON:

application/json

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

Untuk JSONP (runnable javascript) dengan callback:

application/javascript

Berikut adalah beberapa posting blog yang disebutkan dalam komentar yang relevan.

9674
Gumbo

IANA telah mendaftarkan Tipe MIME resmi untuk JSON sebagaiapplication/json.

Ketika ditanya tentang mengapa bukan text/json, Crockford tampaknya mengatakan JSON bukan JavaScript atau teks dan juga IANA lebih cenderung membagikan application/* daripada text/*.

Sumber lainnya:

1557
gnrfan

Untuk JSON:

Content-Type: application/json

Untuk JSON-P :

Content-Type: application/javascript
833
Alix Axel

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

Misalnya, saya menggunakan Ext GWT dan respons server harus berupa text/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");
    }
});

Jika menggunakan tipe application/json response, browser menyarankan saya untuk menyimpan file.

Cuplikan 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);
    }
};
610
Mikhail.Mamaev

JSON:

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

Contoh:

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

Tipe-Konten: application/json


JSON-P:

JSON dengan bantalan. Respons adalah data JSON, dengan panggilan fungsi yang melingkupinya.

Contoh:

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

Tipe-Konten: application/javascript

452
Bhavin

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 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 baris

application/json json

Kemudian restart Apache:

Sudo service Apache2 restart
387
Gourneau

Jika Anda memanggil ASP.NET Web Services dari sisi klien Anda harus menggunakan application/json agar bisa berfungsi. Saya percaya ini sama untuk jQuery dan Ext frameworks.

372
markvpc

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 tepat adalah application/javascript.

296
Resist Design

Tidak ada keraguan bahwa application/json adalah tipe terbaik MIME 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 ke file web.config saya untuk mengompres respons.

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

Dengan menggunakan ini, halaman .aspx dikompres dengan g-Zip tetapi respons JSON tidak. saya tambahkan

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

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

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

di bagian tipe statis dan dinamis, dan mengubah tipe respons di

.ashx (penangan asinkron) ke

application/x-javascript

Dan sekarang saya menemukan bahwa respons JSON saya dikompres dengan g-Zip. Jadi saya pribadi merekomendasikan untuk menggunakan

application/x-javascript

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

285
shashwat

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

  • Tidak ada lagi peringatan dari Chrome ketika JSON diambil dari server.
  • Firebug akan menambahkan tab ke respons yang menunjukkan Anda data JSON diformat. Jika tipe MIME berbeda, itu hanya akan muncul sebagai 'Konten respons'.
259
Ivo Limmen

Tidak semuanya berfungsi untuk tipe konten application/json.

Jika Anda menggunakan Ext JS form 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 header Content-Type harus diatur ke text/html untuk memberitahu browser untuk memasukkan teks tidak berubah ke dalam badan dokumen.

Lihat dokumentasi Ext JS 3.4.0 API .

234
Conan

JSON adalah bahasa khusus domain (DSL) dan format data yang tidak bergantung pada JavaScript, dan karenanya memiliki MIME type, application/json. Rasa hormat terhadap tipe MIME tentu saja didorong oleh klien, jadi text/plain dapat melakukan transfer byte, tetapi kemudian Anda akan mendorong interpretasi ke domain aplikasi vendor secara tidak perlu - application/json. Apakah Anda mentransfer XML melalui text/plain?

Tapi jujur, pilihan tipe MIME Anda adalah saran kepada klien tentang bagaimana menafsirkan data- text/plain atau text/HTML (bila bukan HTML) seperti jenis penghapusan-sama tidak informatifnya dengan membuat semua objek Anda mengetikkan Objek dalam bahasa yang diketikkan .

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- TENANG layanan JSON sering tidak memiliki runtime JavaScript, tapi itu tidak menghentikan mereka menggunakan JSON sebagai format pertukaran data yang layak. Jika klien lumpuh ... maka saya mungkin akan mempertimbangkan injeksi HTML melalui layanan Ajax templating.

Aplikasi/JSON!

219
VLostBoy

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 sudah disorot juga, tetapi beberapa klien tidak menanganinya dengan baik, itu sebabnya jQuery merekomendasikan text/html default.

203

Jawaban yang benar adalah:

Content-Type: application/json
161
Irfan DANISH

Seperti yang banyak orang lain sebutkan, 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 sebelum application/javascript dibuat standar.

  • text/javascript: Sekarang sudah usang. 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 didaftarkan secara resmi.

Semua dalam semua, setiap kali Anda ragu tentang jenis konten, Anda harus memeriksa tautan ini

158
fcm

Di JSP , Anda dapat menggunakan ini dalam arahan halaman:

<%@ page language="Java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>

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

141
raja

"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())
  }
}
109
Sukane

Pendaftaran IANA untuk application/json mengatakan

Aplikasi yang menggunakan tipe media ini: JSON telah digunakan untuk bertukar data antara aplikasi yang ditulis dalam semua bahasa pemrograman ini: ActionScript, C, C #, Clojure, ColdFusion, Common LISP, E, Erlang, Go, Java, JavaScript, Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, dan Skema.

Anda akan melihat bahwa IANA.org tidak mencantumkan jenis media lain mana pun , bahkan application/javascript sekarang sudah usang. Jadi application/json adalah satu-satunya yang mungkin benar jawab.

Dukungan browser adalah hal lain.

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

Yang lebih aneh 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&q=jsonexample"

Output: Content-Type: text/javascript

curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=f82254c1491d894f1204d8408f645a93"

Output: Content-Type: text/xml

101
Jhawins

Jenis MIME yang tepat adalahapplication/json

TETAPI

Saya mengalami banyak situasi di mana jenis browser atau kerangka kerja yang dibutuhkan pengguna:

text/html

application/javascript
84
LombaX

Saya menggunakan di bawah ini

contentType: 'application/json',
data: JSON.stringify(SendData),
71
Andro

Header Content-Type harus diatur ke ' application/json ' saat memposting. Server yang mendengarkan permintaan harus menyertakan " Terima = aplikasi/json ". Di Spring MVC Anda dapat melakukannya seperti ini:

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

Tambahkan tajuk ke respons:

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
63

Di Spring Anda memiliki tipe yang ditentukan: MediaType.APPLICATION_JSON_VALUE yang setara dengan application/json .

56
Chand Priyankara

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

Saya menggunakan kode ini untuk meletakkan data di JSON di Google Cloud Storage (GCS) yang diatur dapat dilihat secara publik :

$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 mendapatkan kembali data secara langsung:

$data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json"));
56
Chetabahana

Untuk JSON, saya menggunakan:

 Content-Type: application/json

Ini dijelaskan dalam proposal Format Pertukaran Data JSON IETF 7158, Bagian 1.2: Spesifikasi JSON .

48
Mehmet_

Jika JSON dengan padding maka itu akan menjadi application/jsonp. Jika JSON tanpa bantalan maka itu akan menjadi application/json.

Untuk menangani keduanya, ini adalah praktik yang baik untuk menggunakan: 'application/javascript' tanpa mengganggu apakah itu dengan padding atau tanpa padding.

48
Ankit Zalani

Memperluas respons yang diterima, ketika Anda menggunakan JSON dalam konteks REST ...

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

Dan jika Anda memutuskan untuk mengikuti jsonapi spesifikasi, 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 yang lebih eksplisit Content-Type daripada hanya application/json.

Mengikuti alasan ini, konteks lain dapat membenarkan yang lebih spesifik Tipe Konten.

41
jgomo3

Pengembang PHP menggunakan ini:

<?php
    header("Content-type: application/json");

    // Do something here...
?>
40
user3087089

Jika Anda mendapatkan data dari REST API di JSON maka Anda harus 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
38
Krishna

JSON (Notasi Objek JavaScript) dan JSONP ("JSON with padding") format 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.

JSONRFC 4627 (Aplikasi/json Jenis Media untuk Notasi Objek JavaScript (JSON)) adalah spesifikasi format JSON. Dikatakan di bagian 6, bahwa jenis media MIME untuk teks JSON adalah

application/json.

JSONPJSONP ("JSON with padding") ditangani dengan cara yang berbeda dari JSON, di browser. JSONP diperlakukan sebagai skrip JavaScript biasa dan oleh karena itu harus menggunakan application/javascript, jenis MIME resmi saat ini untuk JavaScript. Namun, dalam banyak kasus, tipe text/javascript MIME akan berfungsi dengan baik juga.

Perhatikan bahwa text/javascript telah ditandai sebagai usang oleh RFC 4329 (Scripting Media Type) dokumen dan disarankan untuk menggunakan tipe application/javascript sebagai gantinya. Namun, karena alasan warisan, text/javascript masih banyak digunakan dan memiliki dukungan lintas-browser (yang tidak selalu merupakan kasus dengan application/javascript jenis MIME, terutama dengan browser lama).

24

Content-Type: application/json - json
Content-Type: application/javascript - json-P
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript TAPI usang, versi lama IE digunakan untuk digunakan sebagai atribut html.
Content-Type: text/x-javascript - Jenis Media JavaScript TAPI usang
Content-Type: text/x-json - json sebelum aplikasi/json didaftarkan secara resmi.

23
Kashif Solangi

Untuk menentukan hasil JSON yang menarik, Anda menambahkan "application/json" di header permintaan Anda seperti di bawah ini:

"Terima: aplikasi/json" adalah format respons yang diinginkan.

"Tipe Konten: application/json" menentukan format konten permintaan Anda, tetapi kadang-kadang Anda menentukan application/json dan application/xml, tetapi kualitasnya mungkin berbeda. Server mana yang akan mengirim kembali format respons yang berbeda, lihat contohnya:

Accept:application/json;q=0.4,application/xml;q=8

Ini akan mengembalikan XML, karena XML memiliki kualitas yang lebih tinggi.

6
behzad babaei

Standar saat ini yang tepat adalah application/json. Sementara pengodean default adalah UTF-8, perlu disebutkan bahwa itu bisa juga UTF-16 atau utf-32. Ketika JSON ditulis dalam UTF-16 atau UTF-32, pengkodean transfer data biner harus digunakan.

Ada informasi lebih lanjut tentang json di sini: https://tools.ietf.org/html/rfc4627

informasi lebih lanjut tentang encoding transfer biner di sini: https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

5
sammyb123

Untuk melengkapi sisa jawaban, tipe MIME untuk data tertaut JSON (JSON-LD) menurut W3C adalah:

application/ld+json

Ketikkan nama: aplikasi

Nama subtipe: ld + json

Selain itu, dari sumber yang sama:

Ekstensi file :

.jsonld

5
alejnavab

Selalu coba untuk mengingat ketiga tipe konten ini walaupun ada banyak tipe konten . karena Anda mungkin harus menggunakan ini lebih sering.

  • Content-Type: application/json
  • Content-Type: application/xml
  • Jenis-Konten: teks/html
1
cherankrish