Вопрос: Каков правильный тип контента JSON?


Я возился с JSON в течение некоторого времени, просто выталкивая его как текст, и это никому не мешало (что я знаю), но я хотел бы начать делать все правильно.

я видел так многие предполагаемые «стандарты» для типа контента JSON:

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

Но что правильно, или лучше? Я понимаю, что между ними существуют проблемы с безопасностью и поддержкой браузера.

Я знаю, что есть аналогичный вопрос, Какой тип MIME, если JSON возвращается API REST? , но я бы хотел немного более целенаправленный ответ.


9119


источник


Ответы:


Для текста JSON:

application/json

Тип мультимедиа MIME для текста JSON application/json, Кодировка по умолчанию - UTF-8. (Источник: RFC 4627 ).

Для JSONP (runnable javascript) с обратным вызовом:

application/javascript

Вот некоторые сообщения в блоге, которые были упомянуты в соответствующих комментариях.


9089



IANA зарегистрировал официальный MIME-тип для JSON как application/json,

Когда его спросили о том, почему text/json, Крокфорд, кажется, сказал, что JSON на самом деле не JavaScript, а текст, а также IANA, скорее всего, раздаст application/*чем text/*,

Больше ресурсов:


1457



Для JSON:

Content-Type: application/json

Для JSON-P :

Content-Type: application/javascript

776



Конечно, правильный тип MIME-носителя для JSON application/json, но необходимо понять, какой тип данных ожидается в вашем приложении.

Например, я использую Ext GWT и ответ сервера должен идти как текст / html но содержит данные JSON.

Клиентская сторона, слушатель формы 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");
    }
});

В случае использования Применение / JSON тип ответа, браузер предлагает мне сохранить файл.

Исходный код исходного кода на стороне сервера, используя 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);
    }
};

579



JSON:

Ответ - это динамически генерируемые данные в соответствии с параметрами запроса, переданными в URL.

Пример:

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

Тип содержимого: application/json


JSON-P:

JSON с отступом. Ответ - это данные JSON с вызовом функции, обернутым вокруг него.

Пример:

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

Тип содержимого: application/javascript


426



Если вы используете Ubuntu или Debian, и вы обслуживаете файлы .json через Apache, вы можете использовать файлы с правильным типом контента. Я делаю это прежде всего потому, что хочу использовать расширение Firefox JSONView

Модуль Apache mod_mime поможет сделать это легко. Однако, с Ubuntu вам нужно отредактировать файл /etc/mime.types и добавьте строку

application/json json

Затем перезапустите Apache:

sudo service apache2 restart

371



If you're calling ASP.NET Web Services from the client-side you have to use application/json for it to work. I believe this is the same for the jQuery and Ext frameworks.


360



The right content type for JSON is application/json UNLESS you're using JSONP, also known as JSON with Padding, which is actually JavaScript and so the right content type would be application/javascript.


286