Какъв е правилният тип съдържание на JSON?

Прекарах известно време в бъркотия с JSON , просто го избутах като текст и това не навреди на никого (което знам), но бих искал да започна да върша нещата както трябва.

Видях толкова много предполагаеми „стандарти“ за типа съдържание в JSON:

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

Но какво е правилно или по-добре? Разбирам, че между тях има проблеми със сигурността и поддръжка на браузъра.

Знам, че има подобен въпрос.Какво е MIME тип, ако JSON се връща от REST API? но бих искал малко по-фокусиран отговор.

9470
25 янв. определени от Oli Jan 25 2009-01-25 18:25 '09 в 18:25 2009-01-25 18:25
@ 38 отговора
  • 1
  • 2

За JSON текст:

application/json

Типът MIME носител за JSON текст е application/json . Кодирането по подразбиране е UTF-8. (Източник: RFC 4627 ).

За JSONP (изпълним JavaScript) с обратно извикване:

application/javascript

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

9468
25 янв. Гъмбо отговори на 25 януари 2009-01-25 18:27 '09 в 18:27 2009-01-25 18:27

IANA е регистрирала официалния MIME тип за JSON като application/json .

Когато е попитан защо не text/json , Crockford изглежда е казал, че JSON не е наистина JavaScript, а текст, а IANA е по-вероятно да подаде application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Използвайки това, .aspx страниците бяха компресирани с g-zip, но JSON отговорите не бяха. - добавих

 <add mimeType="application/json" enabled="true"/> 

в секции от статични и динамични типове. Но това изобщо не компресира JSON отговорите.

След това изтрих този нов добавен тип и добавих

 <add mimeType="application/x-javascript" enabled="true"/> 

в раздели на статични и динамични типове и променен типът на отговор в

.ashx (асинхронен манипулатор) на

 application/x-javascript 

И сега открих, че моите JSON отговори бяха компресирани с g-zip. Ето защо, аз лично препоръчвам използването

 application/x-javascript 

само ако искате да компресирате вашите JSON отговори в среда на обществено хостване . Защото те не ви позволяват да променяте конфигурациите на IIS на споделен хостинг.

282
18 апр. отговорът е даден от shashwat 18 апр. 2012-04-18 11:22 '12 в 11:22 2012-04-18 11:22

Само при използване на application/json като MIME имам следното (от ноември 2011 г. с най-новите версии на Chrome, Firefox с Firebug ):

  • Няма повече предупреждения от Chrome, когато изтегляте JSON от сървъра.
  • Firebug ще добави раздел към отговора, показващ форматираните данни в JSON. Ако типът MIME е различен, той ще бъде показан като "Съдържание на отговора".
257
30 нояб. Отговорът е даден от Иво Лиммен 30 ноември. 2011-11-30 09:42 '11 в 9:42 2011-11-30 09:42

Не всичко работи за application/json тип съдържание application/json .

Ако използвате Ext JS за изпращане на файл, имайте предвид, че отговорът на сървъра се анализира от браузъра, за да се създаде документ за <iframe> .

Ако сървърът използва JSON за изпращане на върнатия обект, тогава заглавието на Content-Type трябва да бъде настроено на text/html да укаже на браузъра да вмъкне текст без промени в тялото на документа.

Вижте документацията на Ext JS 3.4.0 API .

232
07 сент. Конан отговори 07 Сеп 2011-09-07 05:41 '11 в 5:41 ч. 2011-09-07 05:41

JSON е език на домейн (DSL) и формат на данните, който е независим от JavaScript и като такъв има свой собствен MIME , application/json . Уважението към MIME типовете, разбира се, зависи от клиента, така че text/plain може да направи за прехвърляне на байтове, но тогава ще тълкувате ненужно интерпретацията на домейна на доставчика на приложения - application/json . Предавате ли XML чрез text/plain ?

Но честно казано, вашият избор на MIME тип е съвет към клиента как да интерпретира данните - text/plain или text/HTML (когато не е HTML) - като изтриване на стилове - това е неинформативен, като създаване на всичките Ви обекти на типизиран език.

Липсата на време за изпълнение на браузъра, което знам, ще вземе JSON документ и автоматично ще го направи достъпна за изпълнение като обект, достъпен за JavaScript, без намеса, но ако работите с осакатен клиент, това е друг въпрос. Но това не е цялата история. RESTful JSON услугите често нямат JavaScript автономия, но това не им пречи да използват JSON като жизнеспособен формат за обмен на данни. Ако клиентите са повредени ... тогава бих си помислил, че е възможно HTML инжектирането да се прави с помощта на Ajax шаблон.

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

217
15 мая '12 в 1:19 2012-05-15 01:19 отговорът е даден от VLostBoy 15 май '12 в 1:19 2012-05-15 01:19

Ако сте в клиентска среда, се изискват изследвания за поддръжка на различни браузъри за добре поддържано уеб приложение.

Правилният HTTP Content-Type ще бъде application/json , тъй като и други вече са разпределени, но някои клиенти не се справят с това много добре, така че jQuery препоръчва използването на стандартния text/html .

201
27 апр. Отговорът е даден от Emanuele Del Grande 27 април. 2012-04-27 19:27 '12 at 7:27 pm 2012-04-27 19:27

Правилният отговор е:

 Content-Type: application/json 
159
31 дек. отговорът е даден от Irfan DANISH 31 декември. 2012-12-31 09:29 '13 в 9:29 2012-12-31 09:29

Подобно на много други, 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 получи официална регистрация.

По принцип, когато имате съмнения относно видовете съдържание, трябва да проверите тази връзка.

156
02 апр. отговорът е даден fcm 02 Apr 2013-04-02 14:10 '13 в 14:10 2013-04-02 14:10

В JSP можете да използвате това в директивата на страницата:

 <%@ page > 

Правилният MIME тип за JSON е application/json . JSP ще го използва, за да изпрати отговор на клиента.

139
19 янв. отговорът е даден раджа 19 януари. 2013-01-19 11:22 '13 в 11:22 2013-01-19 11:22

" application/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()) } } 
108
26 февр. Отговорът е даден от Sukane на 26 февруари. 2013-02-26 14:55 '13 в 14:55 2013-02-26 14:55

IANA регистрацията за application/json казва

Приложения, които използват този вид медия: JSON е използван за обмен на данни между приложения, написани на всички тези езици за програмиране: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Ще забележите, че IANA.org не изброява нито един от тези други видове медии , всъщност дори application/javascript е остаряло. По този начин, application/json е наистина единственият верен отговор.

Поддръжката на браузъра е друго нещо.

Най-често срещаните нестандартни типове медии са text/json или text/javascript . Но някои големи имена дори използват text/plain .

Още по-странно е заглавието Content-Type, изпратено от Flickr, което връща JSON като text/xml . Google използва text/javascript за някои от тях ajax apis.

примери:

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

Изход: Content-Type: text/javascript

 curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo> 

Изход: Content-Type: text/xml

98
12 февр. Отговор, даден от Jhawins 12 февруари 2014-02-12 19:12 '14 в 19:12 2014-02-12 19:12

Правилният тип е MIME application/json

НО

Имам много ситуации, когато имам нужда от тип браузър или потребител на рамката:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 отговорът е даден LombaX 03 май '13 в 19:00 2013-05-03 19:00

Използвам по-долу

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 отговорът беше даден от Андро на 16 май'13 в 15:43 2013-05-16 15:43

Заглавната част на заглавието Content-Type трябва да бъде настроена на application / json при публикуване. Сървърът, който слуша заявката, трябва да включва " Accept = application / json ". През пролетния MVC можете да направите това, както следва:

 @RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json") 

Добавете заглавия към отговора:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Отговор от Александър Буракевич 09 Авг. 2013-08-09 13:49 '13 в 13:49 2013-08-09 13:49

През пролетта имате специфичен тип: MediaType.APPLICATION_JSON_VALUE , който е еквивалентен на application / json.

55
29 июня '13 в 11:34 2013-06-29 11:34 отговорът е даден от Чан Приянкара на 29 юни'13 в 11:34 2013-06-29 11:34

application/json работи добре в PHP за съхраняване на масив или обект с данни.

Използвам този код, за да поставям данни в JSON в Google Cloud Storage (GCS) , който е поставен публично за гледане :

 $context = stream_context_create([ 'gs' => [ 'acl'=>'public-read', 'Content-Type' => 'application/json', ] ]); file_put_contents( "gs://BUCKETNAME/FILENAME.json", json_encode((object) $array), false, $context ); 

За да върнете данните директно:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Отговорът е даден Chetabahana 01 Apr. 2015-04-01 19:13 '15 в 19:13 2015-04-01 19:13

За JSON използвам:

  Content-Type: application/json 

Това е описано в клауза ITSF JSON Data Interchange Format 7158, раздел 1.2: Спецификации на JSON .

47
06 февр. Отговорът е даден от Mehmet_ 06 Feb. 2015-02-06 15:01 '15 в 15:01 2015-02-06 15:01

Ако JSON е попълнен, той ще бъде application/jsonp . Ако JSON няма добавка, тя ще бъде application/json .

За да се справят с тях, се препоръчва да използвате: "application / javascript", без да се притеснявате дали е с или без подложка.

47
21 июня '13 в 18:22 2013-06-21 18:22 отговорът е даден от Ankit Zalani на 21 юни '13 в 6:22 2013-06-21 18:22

Разширяване на получените отговори, когато използвате JSON в контекста на REST ...

Има силен аргумент за използването на application/x-resource+json и application/x-collection+json когато представяте ресурси и колекции REST.

И ако решите да следвате спецификацията jsonapi , трябва да използвате application/vnd.api+json както е документирано.

Въпреки че няма универсален стандарт, ясно е, че добавената семантика на прехвърлените ресурси оправдава по-явното съдържание от тип application/json .

Следвайки тези съображения, други контексти могат да оправдаят по-конкретен Content-Type.

40
09 июня '15 в 22:12 2015-06-09 22:12 отговорът е даден jgomo3 09 юни '15 в 22:12 ч. 2015-06-09 22:12

PHP разработчиците използват това:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 отговорът е даден от user3087089 29 март '14 в 8:43 2014-03-29 08:43

Ако получите данните от REST API в JSON, трябва да използвате типа съдържание

 For JSON data: Content-Type:application/json For HTML data: Content-Type:text/html, For XHTML data: Content-Type:application/xhtml+xml, For XML data: Content-Type:text/xml, application/xml 
37
11 апр. Отговор, даден от Кришна на 11 април 2016-04-11 12:15 '16 в 12:15 ч. 2016-04-11 12:15

JSON (JavaScript Object Designation) и JSONP ("JSON с подложка") изглеждат много сходни и затова може да бъде много объркващо какъв тип MIME трябва да използват. Въпреки че форматите изглеждат много сходни, между тях има някои фини различия.

Ето защо, когато се съмнявам, имам много прост подход (който работи добре в повечето случаи), а именно, отидете и проверете съответния RFC документ.

JSON RFC 4627 (Тип на приложението / json Media за обозначаване на JavaScript обекти (JSON)) е спецификация на JSON формат. Раздел 6 гласи, че MIME мултимедийния тип за JSON текст

 application/json. 

JSONP JSONP ("JSON с добавка") се обработва по различен начин от JSON в браузъра. JSONP се третира като обикновен JavaScript скрипт и затова трябва да използва application/javascript, текущият официален MIME тип за JavaScript. В много случаи обаче text/javascript MIME тип ще работи добре.

Моля, обърнете внимание, че text/javascript е отбелязан като остарял RFC 4329 (Scripting Media Types) и се препоръчва вместо него да се използва application/javascript . Въпреки това, поради наследени причини, text/javascript е все още широко използван и поддържа крос-браузър (който не винаги е тип на application/javascript MIME, особено в по-старите браузъри).

23
15 февр. отговор, даден от Iresha Rubasinghe на 15 февруари. 2016-02-15 06:20 '16 в 6:20 2016-02-15 06:20

Content-Type: application/json - JSON
Content-Type: application/javascript - json-P
Content-Type: application/x-javascript - javascript
Content-Type: text/javascript - javascript, но остарелите, по-стари версии на IE, се използват като html атрибут.
Content-Type: text/x-javascript - JavaScript мултимедийни типове, но остарели
Content-Type: text/x-json - json преди официалната регистрация на приложението / json.

22
08 авг. Отговор е даден от Кашиф Соланги 08 август. 2017-08-08 06:49 '17 в 6:49 2017-08-08 06:49
  • 1
  • 2

Други въпроси относно тагове или Задайте въпрос