Какой тип содержимого JSON является правильным?

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

Я видел очень много предполагаемых "стандартов" для типа содержимого JSON:

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

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

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

Решение

Для текста JSON:

application/json.

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

Для JSONP (запускаемый javascript) с обратным вызовом:

application/javascript.

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

Комментарии (8)

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

На вопрос, почему не text/json, Крокфорд, кажется, ответил, что JSON - это не совсем JavaScript и не текст, а также IANA с большей вероятностью выдаст application/*, чем text/*.

Дополнительные ресурсы:

Комментарии (6)

Для JSON:

Content-Type: application/json

Для JSON-P:.

Content-Type: application/javascript
Комментарии (1)

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

Например, я использую Ext GWT, и ответ сервера должен идти как text/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");
    }
});

В случае использования типа ответа application/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);
    }
};
Комментарии (1)

В JSON:

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

Пример:

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

Контент-тип: приложение/JSON


В JSON-Р:

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

Пример:

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

Контент-тип: приложение/JavaScript

Комментарии (2)

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

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

application/json json

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

sudo service apache2 restart
Комментарии (2)

Если вы вызываете ASP.NET Web Services со стороны клиента, вам необходимо использовать application/json, чтобы это работало. Я полагаю, что это то же самое для фреймворков jQuery и Ext.

Комментарии (2)

Правильный тип содержимого для JSON-это приложение/JSON, если вы не're, используя JSONP в, также известный как JSON с подкладкой, которая на самом деле JavaScript и поэтому правильный тип контента будет приложение/JavaScript.

Комментарии (0)

Нет никаких сомнений, что приложение/JSON - лучшее МИМ тип ответа JSON.

Но я имел некоторый опыт, где я должен был использовать `приложения/x-javascript и из-за некоторых проблем сжатия. Мой хостинг среда хостинга с у GoDaddy. Они не позволяют мне менять конфигурации сервера. Я добавил следующий код в мой веб.файл конфигурации для сжатия ответов.
















С помощью этого .aspx-страницы был сжат с G-молнии, но JSON ответы не были. Я добавил

в статических и динамических разделов видах. Но это не компресс JSON ответы на все.

После этого я удалила этот добавленный тип и добавил

в обоих статических и динамических разделов видах, и изменил тип реагирования в

.данного (асинхронный обработчик) в

application/x-javascript

И теперь я обнаружил, что мой JSON ответы были сжаты с G-молнии. Поэтому я лично рекомендую использовать

application/x-javascript

только если вы хотите сжать ваш JSON ответы на хостинга окружающей среды. Потому что в хостинга, они не позволяют вам изменить ИИС конфигурации.

Комментарии (1)

Только при использовании приложение/JSON как МИМ тип у меня есть следующие (по состоянию на ноябрь 2011 года с последними версиями Chrome, Firefox с Жучка):

  • Больше никаких предупреждений от Chrome, когда JSON-файл, который загружается с сервера.
  • Поджигатель будет добавить вкладку в ответ показывает вам данные JSON отформатировать. Если тип MIME отличается, он просто будет отображаться как 'содержание ответ'.
Комментарии (0)

Не все работает для типа контента приложение/JSON.

Если вы используете доб&ампер;усилитель; nbsp;в JS форма отправить, чтобы загрузить файл, мы предупреждаем, что ответ сервера обрабатывается браузером, чтобы создать документ Для в <iframe в>.

Если сервер с помощью JSON, чтобы отправить возвращаемый объект, то заголовок тип содержимого должен быть установлен в текст/HTML, чтобы сообщить браузеру, чтобы вставить текст без изменений в тексте документа.

Вижу доб с JS 3.4.0 документации по API.

Комментарии (4)

JSON-это доменного языка (ДСЛ) и формат данных, независимый от языка JavaScript, и как таковое имеет свои собственные МИМ типа приложение/JSON. Уважение типов MIME, конечно, управляемый клиентом, поэтому текст/равнина может сделать для передачи байта, но тогда вы бы взвинчивая толкования к домену приложения без надобности - приложение/JSON. Вы бы передачу XML через текст/равнина?

Но, честно говоря, ваш выбор тип MIME консультаций клиенту о том, как интерпретировать данные- текст/равнина или текст/HTML (когда он'ы не html) как тип стирания - это's, как неинформативные, как сделать все объекты типа Object в типизированном языке.

Без выполнения браузером я знаю, будет принимать JSON-документ и автоматически сделать его доступным для выполнения в качестве доступного объекта JavaScript без вмешательства, но если вы работаете с хромой клиента, что'ы совершенно другое дело. Но, что's не вся история- спокойный JSON-сервисов часто не'т содержать JavaScript время выполнения, но это вовсе'т остановить их с помощью JSON в качестве жизнеспособного формата обмена данными. Если клиенты, которые покалечили... тогда я хотел бы рассмотреть, пожалуй, HTML инъекции через Аякс шаблонизатора вместо этого.

Приложение/JSON!

Комментарии (0)

Если вы'вновь в клиентской среде, исследуя о кросс-браузер поддержка является обязательной для хорошо поддерживает веб-приложения.

Правильный тип содержимого HTTP будет приложение/JSON, как другие уже тоже выделены, но некоторые клиенты не очень хорошо, что's, почему в jQuery рекомендует по умолчанию текст/HTML.

Комментарии (0)

Правильный ответ:

Content-Type: application/json
Комментарии (0)

Как многие другие упомянули, приложение/JSON - это правильный ответ.

Но то, что не'т не объяснил, что других вариантов ты предложил значит.

  • приложение/х-на JavaScript: экспериментальная тип MIME для JavaScript перед приложение/JavaScript был сделан стандарт.

  • текст/JavaScript: теперь устаревшим. Вы должны использовать приложение/JavaScript при использовании JavaScript.

  • текст/х-на JavaScript: экспериментальная тип MIME для описанной выше ситуации.

  • текст/х-формат JSON: экспериментальная тип MIME для JSON перед приложение/JSON официально зарегистрировались.

Все в всех, когда у вас есть какие-либо сомнения о типах контента, вы должны проверить этой ссылке

Комментарии (3)

В ССП, Вы можете использовать это в директиве страницы:

Правильный МИМ тип носителя для JSON-это приложение/JSON. JSP будет использовать его для отправки ответа клиенту.

Комментарии (0)

“`приложение/JSON” - это правильный тип JSON-контента.

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())
  }
}
Комментарии (0)

Регистрация IANA для приложение/JSON говорит

приложения, которые используют этот тип носителя: JSON были использованы для обмен данными между приложениями, написанными во всех этих языки программирования: ActionScript с, С, С#, в Clojure, на ColdFusion, Общий Лисп, е, Эрланг, Давай, Ява, яваскрипт, Луа, цель CAML, На Perl, РНР, питон, Rebol, с Рубином, Scala и схема.

Вы'Лл замечают, что IANA.org не't список какой-либо из этих других видов медиа, на самом деле даже приложение/JavaScript является теперь устаревшим. Так что приложение/JSON - это действительно единственно возможный правильный ответ.

Поддержка браузеров-это другое дело.

Наиболее широко поддерживает нестандартные типы носителей текст/JSON с или текст/JavaScript. Но некоторые знаменитости даже использовать текст/равнина.

Еще более странным является контент-тип заголовка, отправленного компанией Flickr, который возвращает JSON, как текст/XML. Текста Google использует русский язык для некоторых это'API-интерфейсов с помощью AJAX.

Примеры:

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

Вывод: содержимое-тип: текст/JavaScript

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

Вывод: содержимое-тип: текст/XML

Комментарии (0)

Правильный тип MIME приложение/JSON

Но

Я пережил много ситуаций, когда тип браузера или базы пользователей необходимо:

text/html

application/javascript
Комментарии (1)

Я использую ниже

contentType: 'application/json',
data: JSON.stringify(SendData),
Комментарии (0)