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


Benimle uğraşıyorum JSON bir süre için, sadece metin olarak dışarı itiyor ve kimseyi incitmiyor (bildiğim), ama işleri düzgün yapmaya başlamak istiyorum.

Ben gördüm yani JSON içerik türü için birçok "standart" belirtilmiştir:

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ı olduğunu anlıyorum.

Benzer bir sorunun olduğunu biliyorum. JSON bir REST API'sı tarafından döndürüldüğünde MIME türü nedir?ama biraz daha hedefli bir cevap istiyorum.


9201
2018-01-25 15:25


Menşei




Cevaplar:


JSON metni için:

application/json

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

İçin JSONP (runnable javascript) ile geri arama:

application/javascript

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


9176
2018-01-25 15:27



MIME türlerinin tam listesi - Eugen Mihailescu
Dosyayı Json metni ile birlikte gönderebilir miyim? - OPV
Mime türü ne olduğu gerçekten önemli mi? bir nesneye ayrıştırılan metindir. zorlamadan tarayıcınızda açılabilir olmasını istiyorsanız, metin / düz olarak aktarmak daha doğal olmaz ve eğer otomatik olarak indirilmek isteniyorsa uygulama / octet-stream (bunu oluşturuyorsanız kullanışlıdır) yerel olarak kaydedilmek istenen bir web sayfası. MIME tipini bilmesi gereken birçok kişi var mı? Bu yüzden, downloader özel bir json görüntüleyici ile görüntüleyebilir mi? Neyi özel bir mim tipine göre koruyabildim? - Dmitry
"Metin / düz" kullanımı genel olarak kötü bir uygulamadır. Örneğin, web platformunda uygun bir MIME tipi değeri gönderemediğinizde çapraz kaynaklı veri hırsızlığına izin veren saldırılar vardır. - EricLaw
Internet Explorer'ın bazen uygulama / json ile sorunları var - blog çevrimdışı - codetoshare


IANA JSON için resmi MIME Türünü kaydettirdi application/json.

Neden olmasın sorulduğunda text/json, Crockford JSON gerçekten JavaScript ya da metin olmadığını ve aynı zamanda IANA elden daha olası olduğunu söyledi application/* göre text/*.

Daha fazla kaynak:


1473
2018-04-07 04:32



Bir sürü şey text/* muhtemelen ilk günlerde application/* bu günlerde bölüm. - TRiG
Ve bu büyük bir hata imho. JSON metindir. Herhangi bir metin editörü tarafından okunabilir / yazılabilir. Bu bilmek değerlidir, ancak application/json. Altında bir metin editörü ile açılabilecek her şeye sahip olmak harika olurdu. textaltında, belirli XML doktrinleri text/xml/xhtml vb ... Organizasyonda gerçekten yardımcı olabilirdi. - Stijn de Witt
Açabilirim .jpg metin editörümde. - Rohmer
@Rohmer - Bir metin düzenleyicide her şeyi açabilirsiniz, ancak JPEG veya bir Windows .exe veya bir .zip gibi bir ikili format, birçok metin editörünü parçalayabilecek veya istenmeyen davranışlara neden olabilecek yazdırılamaz karakterler içerecektir. Koşmayı dene cat file.jpg Örneğin. Herhangi bir xml veya json dosyası% 100 basılabilir. Sanırım Stijn de Witt'un noktası geçerli bir soru, sanırım evet, şimdi değişmek için çok geç. - XP84
@ XP84 HEX formunda bir metin editörü ile herhangi bir ikili açabilirsiniz. Ve tüm farklı karakterler (16 tanesi)% 100 basılabilir. Yani, bu mantıkla ... tüm ikili metinler nelerdir?  Json metin değil. Json (uyarı: gayri resmi gevşek tanım) bir nesnenin bir metin gösterimi (veya nesnelerin dizisi) - xDaizu


JSON için:

Content-Type: application/json

İçin JSON-P:

Content-Type: application/javascript

786
2018-06-20 03:10



JSONP gerçekten de JSON değil, bir JavaScript nesnesinin geçtiği bir tekniktir - Benjamin Gruenbaum


Tabii ki, JSON için doğru MIME medya türü application/jsonAncak, uygulamanızda hangi tür verilerin beklendiğini anlamak gerekir.

Örneğin kullanıyorum Ext GWT ve sunucu yanıtı şöyle olmalıdır: text / html ancak JSON verilerini içerir.

İstemci tarafı, Ext GWT formu 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");
    }
});

Kullanılması durumunda uygulama / json yanıt türü, tarayıcı dosyayı kaydetmemi önerir.

Sunucu tarafı kaynak kod snippet'i Bahar 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);
    }
};

584
2017-10-07 14:35



Sunucu yanıtı metin / html olarak gitmelidir. Bu ExtJS varyantı için de geçerlidir. - gbegley


JSON:

Yanıt, URL'de iletilen sorgu parametrelerine göre dinamik olarak oluşturulmuş verilerdir.

Ö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ıyla JSON verisidir.

Örnek:

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

İçerik türü:  application/javascript


427
2018-03-28 07:54



Bu, yukarıdaki cevaptan daha az oyu nasıl alır, daha eksiksiz ve tanımlar içerir. - Daniel Waters
@DanielWaters JSON'un tanımı yanlış. Dinamik olarak oluşturulmasına veya sorgu parametrelerine uymasına gerek yoktur. Statik bir JSON dosyası sunabilirsiniz. Ayrıca, en fazla cevaplanan cevabın RFC'ye bir bağlantısı vardır. - styfle
Ayrıca JSONP, varlığa atanan json verisi olabilir. - Jimmy Kane


Ubuntu veya Debian kullanıyorsanız ve .json dosyalarına Apache ile hizmet veriyorsanız, dosyaları doğru içerik türüyle sunmak isteyebilirsiniz. Bunu öncelikle yapıyorum çünkü Firefox eklentisini kullanmak istiyorum JSONView

Apache modülü mod_mime Bunu kolayca yapmanıza yardımcı olacak. Ancak, Ubuntu ile dosyayı düzenlemeniz gerekiyor /etc/mime.types ve çizgi ekle

application/json json

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

sudo service apache2 restart

372
2017-11-16 22:58



genellikle bir yeniden yükleme yeterlidir (yeniden başlatmaya göre daha hızlıdır). Ayrıca, şimdi "sudo service apache2 reload" yapabileceğinizi de unutmayın. - noamtm
Ubuntu 12.04 bunu varsayılan olarak var - Prizoff


ASP.NET Web Services'i istemciden çağırıyorsanız, kullanmak zorundasınız. application/json onun çalışması için. Bunun için aynı olduğunu düşünüyorum. jQuery ve Ext çerçeveler.


361
2018-01-25 15:31



jQuery en azından 'application / json' ve 'text / plain' ile çalışıyor gibi gözüküyor ... Yine de diğerlerini denemedim. - Nathan
jQuery ile çalışabilir content-Type: text/plain, content-Type: application/json, content-Type: application/json; charset=UTF-8, contentType: "application/x-www-form-urlencoded; charset=UTF-8" - Ashraf.Shk786