Už nejaký čas sa pohrávam s JSON, posielam ho len ako text a nikomu to neublížilo (pokiaľ viem), ale rád by som začal robiť veci poriadne.
Videl som už veľa údajných "štandardov" pre typ obsahu JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Ale ktorý z nich je správny alebo najlepší? Zistil som, že medzi nimi existujú rôzne problémy s bezpečnosťou a podporou prehliadačov.
Viem, že existuje podobná otázka: Aký typ MIME, ak je JSON vrátený rozhraním REST API?, ale rád by som dostal trochu cielenejšiu odpoveď.
Pre text JSON:
application/json
Mediálny typ MIME pre text JSON je
application/json
. Predvolené kódovanie je UTF-8. (Zdroj: RFC 4627).
Pre JSONP (spustiteľný javascript) so spätným volaním:
application/javascript
Tu sú niektoré príspevky na blogu, ktoré boli spomenuté v komentároch a ktoré sú relevantné.
Samozrejme, správny typ média MIME pre JSON je application/json
, ale je potrebné si uvedomiť, aký typ údajov sa vo vašej aplikácii očakáva.
Napríklad ja používam Ext GWT a odpoveď servera musí ísť ako text/html, ale obsahuje údaje JSON.
Strana klienta, poslucháč formulára 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");
}
});
V prípade použitia typu odpovede application/json mi prehliadač navrhne uloženie súboru.
Úryvok zdrojového kódu na strane servera s použitím 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);
}
};
Ak voláte webové služby ASP.NET zo strany klienta, musíte použiť application/json
, aby to fungovalo. Domnievam sa, že to isté platí pre rámce jQuery a Ext.