it-swarm-tr.com

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

Bir süredir JSON ile uğraşıyorum, sadece metin olarak bastırdım ve kimseye zarar vermedi (bildiğim kadarıyla), ama düzgün bir şekilde yapmaya başlamak istiyorum.

JSON içerik türü için so çok sayıda "standart" olduğunu gördüm:

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

Ama hangisi doğru ya da en iyisi? Aralarında değişen güvenlik ve tarayıcı desteği sorunlarının olduğunu anlıyorum.

Benzer bir soru olduğunu biliyorum,JSON bir REST API tarafından döndürülüyorsa hangi MIME tipi?, fakat biraz daha hedeflenmiş bir cevap istiyorum.

9670
Oli

JSON metni için:

application/json

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

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

application/javascript

İşte alakalı yorumlarda belirtilen bazı blog gönderileri.

9674
Gumbo

IANA , JSON için resmi MIME Tipiniapplication/jsonolarak kaydetti.

Neden text/json değil sorulduğunda, Crockford, JSON'un gerçekten JavaScript veya metin olmadığını ve IANA'nın application/*'u text/*'dan daha fazla dağıtma ihtimalinin olduğunu söyledi.

Daha fazla kaynak:

1557
gnrfan

JSON için:

Content-Type: application/json

JSON-P için :

Content-Type: application/javascript
833
Alix Axel

Elbette, JSON için doğru MIME medya türü application/json'dir, ancak uygulamanızda ne tür veri beklendiğini anlamak gerekir.

Örneğin, Ext GWT kullanıyorum ve sunucu yanıtı text/html şeklinde olmalı, ancak JSON verilerini içermelidir.

Müşteri tarafı, Dahili GWT form dinleyicisi

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

application/json response tipinin kullanılması durumunda, tarayıcı dosyayı kaydetmemi önerir.

Sunucu tarafı kaynak kodu pasajı Spring MVC kullanarak

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:

Yanıt, URL’de geçirilen sorgu parametrelerine göre dinamik olarak oluşturulan veridir.

Örnek:

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

İçerik Türü: application/json


JSON-P:

Dolgu ile JSON. Yanıt, etrafına sarılmış bir işlev çağrısı ile JSON verileridir.

Örnek:

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

İçerik Türü: application/javascript

452
Bhavin

Ubuntu veya Debian kullanıyorsanız ve Apache üzerinden .json dosyaları sunuyorsanız, dosyaları doğru içerik türüyle sunmak isteyebilirsiniz. Öncelikle bunu yapıyorum çünkü Firefox eklentisini JSONView

Apache modülü mod_mime bunu kolayca yapmanıza yardımcı olacaktır. Ancak, Ubuntu ile /etc/mime.types dosyasını düzenlemeniz ve satırı eklemeniz gerekir.

application/json json

Ardından Apache'yi yeniden başlatın:

Sudo service Apache2 restart
387
Gourneau

İstemci tarafından ASP.NET Web Hizmetleri'ni arıyorsanız, çalışması için application/json kullanmanız gerekir. Bunun, jQuery ve Ext çerçeveleri için aynı olduğuna inanıyorum.

372
markvpc

JSON için doğru içerik türü: application/json. Kullandığınız UNLESS JSONP , ayrıca JSON olarak da bilinir, aslında JavaScript'tir ve böylece doğru içerik türü application/javascript olacaktır.

296
Resist Design

Şüphesiz application/json, bir JSON yanıtı için en iyi MIME türdür.

Ancak bazı sıkıştırma sorunları nedeniyle application/x-javascript kullanmam gereken bazı deneyimlerim oldu. Hosting ortamım GoDaddy ile paylaşılıyor. Sunucu yapılandırmalarını değiştirmeme izin vermiyorlar. Cevapları sıkıştırmak için web.config dosyama aşağıdaki kodu ekledim.

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

Bunu kullanarak, .aspx sayfaları g-Zip ile sıkıştırılmıştır ancak JSON yanıtları alınmamıştır. ekledim

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

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

Bundan sonra bu yeni eklenen türü kaldırdım ve ekledim

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

hem statik hem de dinamik tip bölümlerinde ve

.ashx (asenkron işleyici)

application/x-javascript

Ve şimdi JSON yanıtlarımın g-Zip ile sıkıştırıldığını öğrendim. Bu yüzden şahsen kullanmanızı tavsiye ederim

application/x-javascript

yalnızca JSON yanıtlarınızı a paylaşılan barındırma ortamında olarak sıkıştırmak istiyorsanız. Çünkü paylaşılan barındırmada, IIS yapılandırmalarını değiştirmenize izin vermiyorlar.

285
shashwat

Yalnızca MIME type olarak application/json kullanılırken aşağıdakilere sahibim (Kasım 2011 itibariyle Chrome'un en son sürümleriyle Firefox/ Firebug ):

  • JSON sunucudan yüklendiğinde Chrome'dan uyarı gelmez.
  • Firebug, biçimlendirilmiş JSON verilerini gösteren cevaba bir sekme ekler. MIME tipi farklıysa, sadece 'Yanıt içeriği' olarak görünecektir.
259
Ivo Limmen

Her şey application/json içerik türüne uygun değildir.

Dosya yüklemek için Ext JS form gönder kullanıyorsanız, sunucu yanıtının, <iframe> belgesini oluşturmak için tarayıcı tarafından ayrıştırıldığını unutmayın.

Sunucu, dönüş nesnesini göndermek için JSON kullanıyorsa, tarayıcıya metni değiştirmeden metni belge gövdesine yerleştirmesini bildirmek için Content-Type başlığının text/html olarak ayarlanması gerekir.

Bkz. Ext JS 3.4.0 API dokümantasyonu .

234
Conan

JSON, etki alanına özgü bir dil (DSL) ve JavaScript'ten bağımsız bir veri biçimidir ve bu nedenle kendi MIME türüne application/json sahiptir. MIME türlerine saygı elbette müşteriye yöneliktir, bu nedenle text/plain bayt aktarımı için yapabilir, ancak sonradan satıcı uygulama etki alanına gereksiz yere - application/json yorumlamasını zorlarsınız. XML'i text/plain ile aktarır mısınız?

Ama dürüst olmak gerekirse, MIME türünü seçtiğiniz, müşteriye verinin nasıl yorumlanacağına dair tavsiyede bulunur- text/plain veya text/HTML (HTML olmadığı zaman) tür silmeye benzer; bu, tüm nesne türlerinizi yazılı bir dilde yapmak kadar uninformative olur. .

Tanıdığım hiçbir tarayıcı çalışma zamanı bir JSON belgesini almayacak ve otomatik olarak çalışma zamanına müdahalesi olmadan JavaScript tarafından erişilebilir bir nesne olarak kullanılabilir hale getirecektir, ancak sakat bir müşteri ile çalışıyorsanız, bu tamamen farklı bir konudur. Ancak bu, hikayenin tamamı değil - RESTful JSON hizmetleri genellikle JavaScript çalışma sürelerine sahip değildir, ancak JSON'u uygun bir veri değişim biçimi olarak kullanmalarını durdurmaz. Müvekkiller bu kadar sakatsalarsa, belki de yerine bir Ajax şablonlama servisi kullanarak HTML enjeksiyonu düşünürdüm.

Başvuru/JSON!

219
VLostBoy

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

Doğru HTTP Content-Type, diğerleri zaten vurgulandığı gibi application/json olacaktır, ancak bazı istemciler çok iyi işlemezler, bu yüzden jQuery, varsayılan text/html öğesini önerir.

203

Doğru cevap:

Content-Type: application/json
161
Irfan DANISH

Diğerlerinin de belirttiği gibi, application/json doğru cevaptır.

Ancak henüz açıklanmayan şey, önerdiğiniz diğer seçeneklerin ne anlama geldiğidir.

  • application/x-javascript: application/javascript standart hale getirilmeden önce JavaScript için deneysel MIME türü.

  • text/javascript: Şimdi eski. Javascript kullanırken application/javascript kullanmalısınız.

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

  • text/x-json: application/json resmi olarak kayıtlı olmadan önce JSON için deneysel MIME türü.

Sonuçta, içerik türleri hakkında şüpheniz olduğunda, bu bağlantıyı kontrol etmelisiniz

158
fcm

JSP 'de bunu sayfa direktifinde kullanabilirsiniz:

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

JSON için doğru MIME media türü application/json şeklindedir. JSP müşteriye bir yanıt göndermek için kullanacaktır.

141
raja

application/json” doğru JSON içerik 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())
  }
}
109
Sukane

application/json için IANA kaydı

Bu medya türünü kullanan uygulamalar: JSON, bu programlama dillerinin tamamında yazılmış uygulamalar arasında veri değişimi yapmak için kullanılmıştır: ActionScript, C, C #, Clojure, ColdFusion, Ortak LISP, E, Erlang, Go, Java, JavaScript, Lua, Amaç CAML, Perl, PHP, Python, Rebol, Ruby, Scala ve Düzen.

IANA.org 'nin bu diğer medya türlerinin hiçbirini listelemediğini fark edeceksiniz , aslında application/javascript bile artık eski. Yani application/json gerçekten tek mümkün doğru cevap.

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

En yaygın şekilde desteklenen standart olmayan ortam türleri text/json veya text/javascript'dur. Fakat bazı büyük isimler bile text/plain kullanır.

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

Örnekler:

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

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

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

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

101
Jhawins

Doğru MIME tipi:application/json

FAKAT

Tarayıcı türünün veya çerçeve kullanıcısının ihtiyaç duyduğu birçok durum yaşadım:

text/html

application/javascript
84
LombaX

Aşağıda kullanıyorum

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

Content-Type header gönderilirken ' application/json ' olarak ayarlanmalıdır. İsteği dinleyen sunucu " Kabul et = application/json " içermelidir. Spring MVC’de şu şekilde yapabilirsiniz:

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

Yanıta üstbilgi ekle:

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

Spring öğesinde tanımlı bir türe sahipsiniz: application/json ile aynı olan MediaType.APPLICATION_JSON_VALUE.

56
Chand Priyankara

application/json, bir dizi veya nesne verisini depolamak için PHP öğesinde harika çalışır.

Bu kodu, JSON’da Google Cloud Storage’a (GCS) olarak ayarlanmış/ genel olarak görülebilir :

$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 geri almak için yalındır:

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

JSON için kullanıyorum:

 Content-Type: application/json

Bu, IETF'in JSON Veri Değişim Biçimi 7158 teklifinde, Bölüm 1.2: JSON 'nin özellikleri bölümünde açıklanmaktadır.

48
Mehmet_

JSON dolgulu ise o zaman application/jsonp olacaktır. JSON dolgusuzsa, o zaman application/json olacaktır.

Her ikisiyle de uğraşmak, kullanmak için iyi bir uygulamadır: 'application/javascript', dolgulu veya dolgulu olup olmadığına zahmet etmeden.

48
Ankit Zalani

JSON'u REST bağlamında kullanırken kabul edilen yanıtları genişletmek ...

REST kaynaklarını ve koleksiyonlarını temsil ederken, strong argümanı hakkında application/x-resource+json ve application/x-collection+json kullanımı.

Ve jsonapi spesifikasyonunu izlemeye karar verirseniz, belgelendirildiği gibi,application/vnd.api+json kullanmalısınız).

Evrensel bir standart olmasa da, aktarılmakta olan kaynaklara eklenen anlamın sadece application/json'dan daha açık bir Content-Type haklı çıkardığı açıktır.

Bu akıl yürütmenin ardından, diğer bağlamlar daha spesifik bir Content-Type haklı çıkarabilirdi.

41
jgomo3

PHP geliştiricileri bunu kullanır:

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

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

JSON'da REST API'den veri alırsanı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
38
Krishna

JSON (JavaScript Nesne Notasyonu) ve JSONP ("Dolgulu JSON") biçimleri çok benzer görünüyor ve bu nedenle hangi MIME türünü kullanmaları gerektiğini karıştırıyor olabilir. Biçimler benzer olsa da, aralarında bazı ince farklar vardır.

Bu nedenle, ne zaman bir şüphem olursa olsun (çoğu durumda mükemmel sonuç veren) çok basit bir yaklaşıma sahibim, yani gidip ilgili RFC belgesini kontrol edin.

JSONRFC 4627 (JavaScript Nesne Notasyonu (JSON) için uygulama/json Medya Türü) JSON formatının bir özelliğidir. Bölüm 6’da, JSON metni için MIME ortam türünün

application/json.

JSONPJSONP ("JSON dolgulu") bir tarayıcıda JSON'dan farklı şekilde kullanılır. JSONP normal bir JavaScript betiği olarak kabul edilir ve bu nedenle JavaScript için geçerli resmi MIME türünü application/javascript, kullanmalıdır. Ancak birçok durumda, text/javascript MIME türü de iyi çalışır.

text/javascript dosyasının RFC 4329 (Scripting Media Types) belgesi tarafından eski olarak işaretlenmiş olduğunu ve bunun yerine application/javascript türünü kullanmanız önerilir. Ancak, eski nedenlerden dolayı, text/javascript hala yaygın olarak kullanılmaktadır ve çapraz tarayıcı desteğine sahiptir (bu, her zaman application/javascript MIME türünde, özellikle eski tarayıcılarda olduğu gibi bir durum değildir).

24
Iresha Rubasinghe

Content-Type: application/json - json
Content-Type: application/javascript - json-P
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript BUT eski, eski IE sürümleri html niteliği olarak kullanılır.
Content-Type: text/x-javascript - JavaScript Medya Türleri BUT eski
Content-Type: text/x-json - uygulamadan önce json/json resmi olarak tescil edilmiştir.

23
Kashif Solangi

İlginç JSON sonucunu belirlemek için, aşağıdaki gibi istek başlığınıza "application/json" ekleyin:

"Kabul et: uygulama/json" istenen bir cevap formatıdır.

"Content-Type: application/json" isteğinizin içerik biçimini belirtir, ancak bazen hem application/json hem de application/xml olarak belirtirsiniz, ancak bunların kalitesi farklı olabilir. Hangi sunucu farklı yanıt biçimlerini geri gönderir, örneğe bakın:

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

Bu XML döndürür çünkü XML daha kalitelidir.

6
behzad babaei

Uygun akım standardı application/json. Varsayılan kodlama UTF-8 olsa da, bunun UTF-16 veya utf-32 olabileceğini de belirtmekte fayda var. JSON UTF-16 veya UTF-32'ye yazıldığında, ikili içerik aktarma kodlaması kullanılmalıdır.

Burada json hakkında daha fazla bilgi var: https://tools.ietf.org/html/rfc4627

i̇kili transfer kodlaması hakkında daha fazla bilgiyi burada bulabilirsiniz: https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

5
sammyb123

Cevapların geri kalanını tamamlamak için, JSON bağlantılı veri için MIME türü (JSON-LD) W3C'ye göre :

application/ld+json

Tip adı: uygulama

Altyazı adı: ld + json

Ayrıca, aynı kaynaktan:

Dosya uzantısı (ları) :

.jsonld

5
alejnavab

Her zaman bu üç içerik türünü hatırlamaya çalışın birçok içerik türü olmasına rağmen . Bunları daha sık kullanmanız gerekebileceğinden.

  • İçerik Türü: uygulama/json
  • İçerik Türü: uygulama/xml
  • İçerik Türü: metin/html
1
cherankrish