Я некоторое время возился с JSON , просто выдвигал его в виде текста, и это никому не повредило (насколько я знаю), но я хотел бы начать делать все правильно.
Я видел так много предполагаемых «стандартов» для типа контента JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Но какой из них правильный или лучший? Я понимаю, что между ними существуют проблемы с безопасностью и поддержкой браузера.
Я знаю, что есть похожий вопрос: какой тип MIME, если JSON возвращается REST API? , но я бы хотел более точный ответ.
IANA зарегистрировала официальный тип MIME для JSON как
application/json
.На вопрос о том, почему нет
text/json
, Крокфорд, похоже, сказал, что JSON на самом деле не JavaScript и не текст, а также IANA с большей вероятностью раздаст,application/*
чемtext/*
.Больше ресурсов:
источник
text/*
раздел в первые дни, которые, вероятно, будут добавлены вapplication/*
раздел в эти дни.cat file.jpg
например. Принимая во внимание, что любой файл XML или JSON на 100% для печати. Поэтому я думаю, что точка зрения Стейн де Витта является верной, несмотря на то, что да, уже слишком поздно что-либо менять.x
. Не 78. JSON - это текст точно так же, как HTML (text / html). Он содержит только читаемые текстовые символы со структурированным значением в них.Для JSON:
Для JSON-P :
источник
Конечно, правильный тип носителя MIME для JSON есть
application/json
, но необходимо понять, какой тип данных ожидается в вашем приложении.Например, я использую Ext GWT, и ответ сервера должен идти как text / html, но содержит данные JSON.
Клиентская сторона, прослушиватель Ext GWT form
В случае использования типа ответа application / json браузер предлагает мне сохранить файл.
Фрагмент исходного кода на стороне сервера с использованием Spring MVC
источник
JSON:
Ответ - это динамически генерируемые данные в соответствии с параметрами запроса, переданными в URL.
Пример:
Тип содержимого:
application/json
JSON-P:
JSON с дополнением. Ответ - данные JSON, с обернутым вызовом функции.
Пример:
Тип содержимого:
application/javascript
источник
Если вы используете Ubuntu или Debian и обслуживаете файлы .json через Apache, вы можете использовать файлы с правильным типом содержимого. Я делаю это в первую очередь потому, что я хочу использовать расширение Firefox JSONView
Модуль Apache mod_mime поможет сделать это легко. Однако в Ubuntu вам нужно отредактировать файл /etc/mime.types и добавить строку
Затем перезапустите Apache:
источник
Если вы вызываете ASP.NET Web Services со стороны клиента, вы должны использовать
application/json
его для работы. Я считаю, что это то же самое для фреймворков jQuery и Ext .источник
content-Type: text/plain
,content-Type: application/json
,content-Type: application/json; charset=UTF-8
,contentType: "application/x-www-form-urlencoded; charset=UTF-8"
Правильный тип контента для JSON - это
application/json
ЕСЛИ НЕ используется JSONP , также известный как JSON с Padding, который на самом деле является JavaScript, и поэтому правильный тип контента был быapplication/javascript
.источник
Нет сомнений, что
application/json
это лучший тип MIME для ответа JSON.Но у меня был некоторый опыт, который мне пришлось использовать
application/x-javascript
из-за некоторых проблем со сжатием. Моей хостинговой средой является виртуальный хостинг с GoDaddy . Они не позволяют мне изменять конфигурации сервера. Я добавил следующий код в мойweb.config
файл для сжатия ответов.Благодаря этому страницы .aspx были сжаты с помощью g-zip, а ответы JSON - нет. я добавил
в разделах статического и динамического типов. Но это не сжимает ответы JSON вообще.
После этого я удалил этот недавно добавленный тип и добавил
в разделах статического и динамического типов, а также изменил тип ответа в
.ashx (асинхронный обработчик) в
И теперь я обнаружил, что мои ответы JSON были сжаты с помощью g-zip. Поэтому я лично рекомендую использовать
только если вы хотите сжать ответы JSON в среде общего хостинга . Потому что на виртуальном хостинге они не позволяют изменять конфигурации IIS .
источник
application/json
, я использовать его на мой виртуальный хостинг , и я бы не советовал использовать другой тип контента , чтобы включить сжатие в любом случае, это просто неправильно. Это можно сделать, но все равно будет неправильно. Использование разных типов контента для поддержки браузера - это одно, а использование разных типов контента для сжатия на стороне сервера - это другое.Только при использовании
application/json
в качестве типа MIME у меня есть следующее (по состоянию на ноябрь 2011 года с самыми последними версиями Chrome, Firefox с Firebug ):источник
Не все работает для типа контента
application/json
.Если вы используете отправку формы Ext JS для загрузки файла, имейте в виду, что ответ сервера анализируется браузером для создания документа для
<iframe>
.Если сервер использует JSON для отправки возвращаемого объекта, тогда
Content-Type
заголовок должен быть установлен вtext/html
, чтобы указать браузеру вставлять текст без изменений в тело документа.См. Документацию по API Ext JS 3.4.0 .
источник
application/json
по спецификации.iframe
кажется, огнемload
событие дляapplication/javascript
,application/x-javascript
,text/javascript
,text/plain
, но НЕ обжиг дляapplication/json
ниtext/html
. На сегодняшний день Android <= 2.3 составляет около 50% доли рынка Android.JSON - это предметно-ориентированный язык (DSL) и формат данных, не зависящий от JavaScript, и поэтому имеет свой собственный тип MIME
application/json
. Уважение к MIME-типам, конечно же, зависит от клиента, поэтомуtext/plain
может применяться и для передачи байтов, но тогда вы будете без необходимости продвигать интерпретацию в домен приложения поставщика -application/json
. Вы бы передали XML черезtext/plain
?Но, честно говоря, ваш выбор типа MIME - это совет клиенту о том, как интерпретировать данные,
text/plain
илиtext/HTML
(если это не HTML) подобен стиранию типа - это так же неинформативно, как создание всех ваших объектов типа Object на типизированном языке.Ни одна из известных мне сред выполнения браузера не возьмет документ JSON и автоматически сделает его доступным для среды выполнения как доступный для JavaScript объект без вмешательства, но если вы работаете с искалеченным клиентом, это совсем другой вопрос. Но это еще не все - службы RESTful JSON часто не имеют времени выполнения JavaScript, но это не мешает им использовать JSON в качестве жизнеспособного формата обмена данными. Если клиенты настолько уродливы ... тогда я мог бы рассмотреть возможность внедрения HTML через службу шаблонов Ajax .
Применение / JSON!
источник
Если вы находитесь в клиентской среде, изучение поддержки кроссбраузерности обязательно для хорошо поддерживаемого веб-приложения.
Правильный HTTP-тип контента был бы
application/json
, как уже отмечали другие, но некоторые клиенты не справляются с этим очень хорошо, поэтому jQuery рекомендует использовать значение по умолчаниюtext/html
.источник
Правильный ответ:
источник
Как многие другие упоминали,
application/json
это правильный ответ.Но что еще не было объяснено, так это то, что означают другие предложенные вами варианты.
application/x-javascript
: Экспериментальный тип MIME для JavaScript до того, какapplication/javascript
был сделан стандартным.text/javascript
Сейчас устарело. Вы должны использоватьapplication/javascript
при использовании JavaScript.text/x-javascript
: Экспериментальный тип MIME для вышеуказанной ситуации.text/x-json
: Экспериментальный MIME-тип для JSON до того, как онapplication/json
был официально зарегистрирован.В общем, когда у вас есть какие-либо сомнения относительно типов контента, вы должны проверить эту ссылку
источник
text/javascript
стал устаревшим? Я все еще заполняю HTML-документы<script type="text/javascript" ...
тэгами.type="text/javascript"
и просто делать<script>...</script>
по крайней мере в соответствии с HTML5.В JSP вы можете использовать это в директиве страницы:
Правильный MIME тип носителя для JSON является
application/json
. JSP будет использовать его для отправки ответа клиенту.источник
«
application/json
» - это правильный тип содержимого JSON.источник
Регистрации IANA для
application/json
говоритВы заметите, что IANA.org не перечисляет ни один из этих других типов медиа , фактически даже
application/javascript
устарел. Так чтоapplication/json
это действительно единственно возможный правильный ответ.Поддержка браузера это другое дело.
Наиболее широко поддерживаемые нестандартные типы носителей - это
text/json
илиtext/javascript
. Но некоторые громкие имена даже используютtext/plain
.Еще более странным является заголовок Content-Type, отправленный Flickr, который возвращает JSON как
text/xml
. Google используетtext/javascript
для некоторых из них ajax apis.Примеры:
Вывод:
Content-Type: text/javascript
Вывод:
Content-Type: text/xml
источник
Правильный тип MIME
application/json
НО
Я сталкивался со многими ситуациями, когда требовался тип браузера или пользователь фреймворка:
источник
Я использую ниже
источник
Content-Type заголовок должен быть установлен в положение « приложения / JSON » при проводке. Прослушивание запроса сервером должно включать « Accept = application / json ». В Spring MVC вы можете сделать это так:
Добавьте заголовки к ответу:
источник
В Spring у вас есть определенный тип:
MediaType.APPLICATION_JSON_VALUE
который эквивалентен application / json .источник
Я использую этот код для помещения данных в JSON в Google Cloud Storage (GCS), который доступен для общего просмотра :
Чтобы вернуть данные прямо вперед:
источник
Если JSON с отступом, тогда это будет
application/jsonp
. Если JSON без дополнения, тогда это будетapplication/json
.Чтобы справиться с обоими, хорошей практикой является использование: application / javascript, не беспокоясь о том, идет ли это с заполнением или без заполнения.
источник
Для JSON я использую:
Это описано в предложении IETF о формате обмена данными JSON 7158, раздел 1.2: спецификации JSON .
источник
Расширение принятых ответов, когда вы используете JSON в контексте REST ...
Существует веский аргумент об использовании
application/x-resource+json
иapplication/x-collection+json
представлении ресурсов и коллекций REST.И если вы решите следовать спецификации jsonapi , вам следует использовать
application/vnd.api+json
, как это задокументировано.Хотя универсального стандарта не существует, ясно, что добавленная семантика к передаваемым ресурсам оправдывает более явный тип контента, чем просто
application/json
.Следуя этому рассуждению, другие контексты могут оправдать более конкретный тип контента .
источник
application/vnd.api+json
Похоже, что это специально для apis, использующего json: api , очень узкую спецификацию с ее собственными ожиданиями и форматом, я не понимаю, что это для любого API, который возвращает json. Пожалуйста, поправьте меня, если я ошибаюсьPHP разработчики используют это:
источник
Если вы получаете данные из REST API в JSON, вам придется использовать тип контента
источник
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- javascriptContent-Type: text/javascript
- javascript НО устаревшие, более старые версии IE, используемые для использования в качестве атрибута html.Content-Type: text/x-javascript
- JavaScript Media Types НО устарелContent-Type: text/x-json
- json до того, как приложение / json было официально зарегистрировано.источник
Форматы JSON (JavaScript Object Notation) и JSONP («JSON with padding») кажутся очень похожими, и поэтому может быть очень запутанным, какой тип MIME они должны использовать. Хотя форматы похожи, между ними есть некоторые тонкие различия.
Поэтому, когда бы ни возникали какие-либо сомнения, у меня есть очень простой подход (который в большинстве случаев работает отлично), а именно, пойти и проверить соответствующий документ RFC.
JSON RFC 4627 (Приложение / JSON Media Type для JavaScript Object Notation (JSON)) является спецификацией формата JSON. В разделе 6 говорится, что тип мультимедиа MIME для текста JSON:
JSONP JSONP («JSON with padding») обрабатывается в браузере не так, как JSON. JSONP рассматривается как обычный сценарий JavaScript, и поэтому он должен использовать
application/javascript,
текущий официальный тип MIME для JavaScript. Однако во многих случаяхtext/javascript
MIME-тип также будет работать нормально.Обратите внимание, что
text/javascript
он помечен как устаревший в документе RFC 4329 (Scripting Media Types), иapplication/javascript
вместо него рекомендуется использовать тип. Однако из-за устаревших причинtext/javascript
он все еще широко используется и поддерживает кросс-браузерную работу (что не всегда имеет место сapplication/javascript
типом MIME, особенно в старых браузерах).источник