Doğru JSON içeriği türü nedir?

JSON ile uğraşmakla biraz zaman geçirdim, sadece metin olarak bastırdım ve kimseye zarar vermedi (ki ben biliyorum), ama doğru şeyler yapmaya başlamak istiyorum.

JSON içerik türü için birçok "iddia edilen" standart olduğunu gördüm:

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

Ama doğru ya da daha iyi olan nedir? Aralarında güvenlik sorunları ve tarayıcı desteği olduğunu biliyorum.

Benzer bir soru olduğunu biliyorum: JSON REST API tarafından döndürülürse MIME türü nedir? ama biraz daha odaklı bir cevap istiyorum.

9470
25 янв. Oli Jan 25 tarafından set 2009-01-25 18:25 '09, 18:25 2009-01-25 18:25
@ 38 cevaplar
  • 1
  • 2

JSON metni için:

application/json

JSON metni için MIME ortam türü application/json . Varsayılan kodlama UTF-8'dir. (Kaynak: RFC 4627 ).

Geri arama ile JSONP (çalıştırılabilir javascript) için:

application/javascript

İşte durumla alakalı yorumlarda belirtilen bazı blog yazıları.

9468
25 янв. Gumbo yanıtladı 25 Ocak 2009-01-25 18:27 '09, 18:27 2009-01-25 18:27

IANA, JSON için resmi MIME türünü application/json olarak tescil ettirmiştir.

Neden text/json değil sorulduğunda, Crockford, JSON'un gerçekten JavaScript değil, metin olduğunu ve IANA'nın application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Bunu kullanarak, .aspx sayfaları g-zip ile sıkıştırıldı, ancak JSON yanıtları değildi. Ekledim

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

Statik ve dinamik tip bölümlerinde. Ancak bu, JSON yanıtlarını hiç sıkıştırmaz.

Ondan sonra, bu yeni eklenen türü sildim ve ekledim

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

Statik ve dinamik tip bölümlerinde ve cevap türünü değiştirdi

.ashx (asenkron işleyici) açık

 application/x-javascript 

Ve şimdi JSON yanıtlarımın g-zip ile sıkıştırıldığını öğrendim. Bu nedenle kişisel olarak kullanmanızı öneririm

 application/x-javascript 

Yalnızca JSON yanıtlarınızı ortak bir barındırma ortamında sıkıştırmak istiyorsanız. Çünkü paylaşılan barındırmadaki IIS yapılandırmalarını değiştirmenize izin vermiyorlar.

282
18 апр. Cevap shashwat 18 nisan tarafından verildi . 2012-04-18 11:22 '12, 11:22 2012-04-18 11:22

Sadece application/json bir MIME olarak kullanırken aşağıdakilere sahibim (Kasım 2011'den bu yana en son sürümleriyle Firefox ile Firefox):

  • JSON'u sunucudan indirirken Chrome'dan hiçbir uyarı almayacaksınız.
  • Firebug, JSON formatındaki verileri gösteren cevaba bir sekme ekler. MIME tipi farklıysa, “Cevap İçeriği” olarak görüntülenecektir.
257
30 нояб. Cevap 30 Kasım'da İvo Limmen tarafından verildi. 2011-11-30 09:42 '11 9:42 2011-11-30 09:42

Her şey içerik türü application/json için işe application/json .

Bir dosyayı göndermek için Ext JS kullanıyorsanız, sunucunun yanıtının <iframe> için bir belge oluşturmak üzere tarayıcı tarafından analiz edildiğini unutmayın.

Sunucu, döndürülen nesneyi göndermek için JSON kullanıyorsa, Content-Type başlığının tarayıcıya belgenin gövdesinde değişiklik yapmadan metin eklemesini bildirmek için text/html olarak ayarlanması gerekir.

Ext JS 3.4.0 API belgelerine bakın .

232
07 сент. Conan yanıtladı 07 Eyl 2011-09-07 05:41 '11 5:41, 2011-09-07 05:41

JSON, JavaScript'ten bağımsız bir etki alanı dili (DSL) ve veri biçimidir ve bu nedenle kendi MIME application/json . Elbette MIME türlerine saygı, müşteriye göre değişir; bu nedenle text/plain baytları aktarmak için yapabilir, ancak uygulama sağlayıcısının etki alanının yorumunu gereksiz yere yorumlayacaksınız - application/json . XML'i text/plain mi text/plain ?

Fakat açıkçası, MIME türünü seçmeniz müşteriye verileri nasıl yorumlayacağınız konusunda tavsiyede bulunur - text/plain veya text/HTML (HTML olmadığında) - stilleri silme gibi - bu yazılmamış tüm nesnelerinizi oluşturma gibi dili.

Bildiğim tarayıcı yürütme süresi eksikliği, bir JSON belgesi alacağını ve otomatik olarak çalışma zamanına müdahaleniz olmadan JavaScript tarafından erişilebilen bir nesne olarak kullanılabilir hale getirmesini sağlar; ancak sakat bir müşteriyle çalışıyorsanız, bu başka bir konudur. Ama bu bütün hikaye değil. RESTful JSON hizmetleri genellikle JavaScript özerkliğine sahip değildir, ancak bu, JSON'u uygulanabilir bir veri alışverişi biçimi olarak kullanmalarını engellemez. Müşteriler zarar görürse ... o zaman HTML enjeksiyonunun bir Ajax şablonu kullanılarak yapılmasının mümkün olduğunu düşünürdüm.

Uygulama / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 Cevap VLostBoy 15 Mayıs '12 tarafından 1:19 2012-05-15 01:19 tarihinde verilmiştir.

Müşteri tarafında bir ortamdaysanız, iyi desteklenen bir web uygulaması için tarayıcılar arası destek araştırması gerekir.

Doğru HTTP Content-Type, application/json , çünkü diğerleri zaten tahsis edilmiştir, ancak bazı istemciler bunu çok iyi idare edemez, bu nedenle jQuery, varsayılan text/html kullanmanızı önerir.

201
27 апр. Cevap Emanuele Del Grande tarafından verildi 27 Nisan. 2012-04-27 19:27 '12, 19:27, 2012-04-27 19:27

Doğru cevap:

 Content-Type: application/json 
159
31 дек. Cevap Irfan DANISH tarafından verildi 31 dec. 2012-12-31 09:29 '13 9: 29'da 2012-12-31 09:29

Diğerleri gibi, application/json doğru cevaptır.

Ancak, sunduğunuz diğer seçeneklerin ne anlama geldiği henüz açıklanmadı.

  • application/x-javascript : application/javascript önce JavaScript için deneysel MIME türü standarttı.

  • text/javascript : şimdi kullanımdan kaldırıldı. application/javascript kullanırken application/javascript kullanmanız gerekir.

  • text/x-javascript : Yukarıdaki durum için deneysel MIME türü.

  • text/x-json : text/x-json application/json önce deneysel MIME türü application/json resmi kayıt yaptırmadan önce.

Genel olarak, içerik türleriyle ilgili şüpheniz olduğunda, bu bağlantıyı kontrol etmelisiniz .

156
02 апр. Cevap fcm 02 nisan verildi 2013-04-02 14:10 '13, 14:10 2013-04-02 14:10

JSP'de bunu sayfa direktifinde kullanabilirsiniz:

 <%@ page > 

JSON için doğru MIME tipi application/json . JSP istemciye yanıt göndermek için kullanacaktır.

139
19 янв. Cevap Raja 19 Ocak'ta verildi . 2013-01-19 11:22 '13 11:22 2013-01-19 11:22

" application/json ", doğru JSON içeriği türüdür.

 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 февр. Cevap 26 Şubat'ta Sukane tarafından verildi . 2013-02-26 14:55 '13, 14:55 2013-02-26 14:55

/ Json'a başvuru için IANA kaydı diyor

Bu medya türünü kullanan uygulamalar: JSON, tüm bu programlama dillerinde yazılmış uygulamalar arasında veri alışverişinde bulunmak için kullanıldı: ActionScript, C, C #, Clojure, ColdFusion, Ortak Lisp, E, Er>

IANA.org'un bu tür diğer medya türlerini listelemediğini fark edeceksiniz, hatta application/javascript bile eskidir. Böylece, application/json gerçekten tek doğru cevaptır.

Tarayıcı desteği başka bir şeydir.

En yaygın standart dışı ortam türleri, text/json veya text/javascript . Ancak bazı büyük isimler bile text/plain .

Hatta yabancı, JSON'u text/xml olarak döndüren Flickr tarafından gönderilen Content-Type başlığı. Google bazıları için ajax apis text/javascript kullanıyor.

örnekler:

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

Çıktı: Content-Type: text/javascript

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

Çıktı: Content-Type: text/xml

98
12 февр. Yanıtlayan : Jhawins 12 Şub 2014-02-12 19:12 '14, 19:12 2014-02-12 19:12

Doğru tip MIME application/json

ANCAK

Bir tarayıcı türüne veya çerçeve kullanıcısına ihtiyacım olduğunda birçok durumla karşılaştım:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 Cevap LombaX 03 Mayıs 19, 19:00 2013-05-03 19:00

Aşağıda kullanıyorum

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 Cevap 16 Mayıs 13, Andro tarafından 15:43 2013-05-16 15:43 tarihinde verilmiştir.

İçerik Tipi başlığının başlığı yayınlanırken application / json olarak ayarlanmalıdır. İsteği dinleyen sunucu " Kabul et = application / json " içermelidir. Spring MVC'de bunu aşağıdaki gibi yapabilirsiniz:

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

Cevabınıza başlıklar ekleyin:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Cevap Alexander Alexanderevych 09 Ağu. 2013-08-09 13:49 '13 13:49 2013-08-09 13:49

İlkbaharda belirli bir türünüz var: uygulama / json'a eşdeğer olan MediaType.APPLICATION_JSON_VALUE .

55
29 июня '13 в 11:34 2013-06-29 11:34 Cevap Chand Priyankara tarafından 29 Haziran 'da 11:34 2013-06-29 11:34 tarihinde verilmiştir.

application/json , bir dizi veya veri nesnesini depolamak için PHP'de iyi çalışır.

Bu kodu JSON’da görüntülemek için herkese açık olarak ayarlanan Google Cloud Storage'da (GCS) veri koymak için kullanıyorum :

 $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 ); 

Verileri doğrudan iade etmek için:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Cevap Chetabahana 01 Nisan veriliyor. 2015-04-01 19:13 '15, 19:13 2015-04-01 19:13

JSON için kullanıyorum:

  Content-Type: application/json 

Bu, IETF JSON Veri Değişim Biçimi 7158 maddesi, Bölüm 1.2: JSON teknik özelliklerinde açıklanmıştır .

47
06 февр. Cevap Mehmet 06 06. 2015-02-06 15:01 '15, 15:01 2015-02-06 15:01

JSON doldurulursa, application/jsonp . JSON'un eklentisi yoksa, application/json .

Onlarla başa çıkmak için kullanılması önerilir: "application / javascript", dolgulu veya dolgulu olup olmadığına dair endişelenmeden.

47
21 июня '13 в 18:22 2013-06-21 18:22 Cevap Ankit Zalani tarafından 21 Haziran ' 13'te 6:22 2013-06-21 18:22 tarihinde verilmiştir.

JSON'u REST bağlamında kullandığınızda alınan yanıtların genişletilmesi ...

Kaynakları ve REST koleksiyonlarını sunarken application/x-resource+json ve application/x-collection+json application/x-resource+json ilişkin güçlü bir argüman var.

Eğer jsonapi spesifikasyonlarını takip etmeye karar verirseniz, application/vnd.api+json belgelendiği gibi kullanmalısınız.

Evrensel bir standart olmamasına rağmen, aktarılan kaynakların eklenmiş semantiğinin sadece application/json daha açık bir Content- application/json haklı çıkardığı açıktır.

Bu düşüncelerden sonra, diğer bağlamlar daha spesifik bir İçerik Tipini haklı gösterebilir.

40
09 июня '15 в 22:12 2015-06-09 22:12 Cevap jgomo3 , 09.06 , 15 ve 10 : 12'de verilmektedir. 2015-06-09 22:12

PHP geliştiricileri bunu kullanır:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 Cevap user3087089 tarafından 29 Mart 14: 08: 04'te 2014-03-29 08:43

Verileri JSON'daki REST API'sinden alıyorsanız, içerik türünü kullanmanız gerekir.

 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 апр. 11 Nisan tarihinde Krishna tarafından verilen cevap 2016-04-11 12:15 '16, 12:15, 2016-04-11 12:15

JSON (JavaScript Object Designation) ve JSONP ("JSON dolgulu ") çok benzer görünüyor ve bu yüzden ne tür bir MIME kullanmaları gerektiğini kafa karıştırıcı olabiliyor. Formatlar çok benzer görünse de, aralarında bazı ince farklar vardır.

Bu nedenle, ne zaman şüphelensem, basit bir yaklaşıma sahibim (ki bu çoğu durumda işe yarar), yani ilgili RFC belgesine gidip kontrol edin.

JSON RFC 4627 (JavaScript Nesneleri Belirlemek için Uygulama Türü / json Media (JSON)) bir JSON formatı özelliğidir. Bölüm 6, JSON metni için MIME multimedya türünü belirtir

 application/json. 

JSONP JSONP ("Eklentili JSON"), tarayıcıdaki JSON'dan farklı şekilde işlenir. JSONP normal bir JavaScript betiği olarak kabul edilir ve bu nedenle JavaScript application/javascript, geçerli resmi MIME türü olan application/javascript, kullanmalıdır. Bununla birlikte, çoğu durumda, text/javascript MIME tipi iyi çalışacaktır.

Lütfen text/javascript eski RFC 4329 (Komut Dosyası Ortam Türleri) olarak işaretlendiğini ve bunun yerine application/javascript kullanmanız önerilir. Bununla birlikte, kalıtsal nedenlerden dolayı, text/javascript hala yaygın olarak kullanılmakta ve çapraz tarayıcıyı desteklemektedir (bu, her zaman application/javascript MIME türü değildir, özellikle eski tarayıcılarda).

23
15 февр. Iresha Rubasinghe tarafından 15 Şubat'ta verilen cevap 2016-02-15 06:20 '16, 06: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, BUT modası geçmiş, eski IE sürümleri, html özelliği olarak kullanılırdı.
Content-Type: text/x-javascript - JavaScript Multimedya Türleri AMA Eski
Content-Type: text/x-json - Uygulamanın / json'un resmi kaydını yapmadan önce json.

22

etiketleri ile ilgili diğer sorular veya Soru sor