Kas yra teisingas JSON turinio tipas?

Kartą su JSON praleidžiau, tiesiog išstumdamas jį kaip tekstą, ir tai nepažeidė nė vieno (ką aš žinau), bet norėčiau pradėti daryti viską teisingai.

Mačiau tiek daug tariamų „JSON“ turinio tipo „standartų“:

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

Bet kas yra teisinga ar geresnė? Suprantu, kad tarp jų yra saugumo problemų ir naršyklės palaikymas.

Žinau, kad yra panašus klausimas: koks yra „MIME“ tipas, jei „REST“ API grąžina JSON? bet norėčiau šiek tiek daugiau dėmesio skirti atsakymui.

9470
25 янв. nustatė Oli 25 sausis 2009-01-25 18:25 '09 18:25 2009-01-25 18:25
@ 38 atsakymai
  • 1
  • 2

Dėl JSON teksto:

application/json

„JSON“ teksto MIME laikmenos tipas yra application/json . Numatytasis kodavimas yra UTF-8. (Šaltinis: RFC 4627 ).

JSONP (vykdomasis javascript) su atgalinio ryšio funkcija:

application/javascript

Štai keletas dienoraščio pranešimų, kurie buvo paminėti su byla susijusiais komentarais.

9468
25 янв. Gumbo atsakė į sausio 25 d 2009-01-25 18:27 '09, 18:27, 2009-01-25 18:27

IANA užregistravo oficialų „MIME“ tipą „JSON“ kaip application/json .

Paklaustas apie tai, kodėl gi ne text/json , „Crockford“, atrodo, sakė, kad JSON nėra „JavaScript“, o tekstas, o IANA greičiausiai perduoda application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Naudojant tai, .aspx puslapiai buvo suspausti su g-zip, bet JSON atsakymai nebuvo. Aš pridėjau

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

statinių ir dinaminių tipų sekcijose. Tačiau tai nesumažina JSON atsakymų.

Po to ištrinau šį naują pridėtą tipą ir pridėjau

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

statinių ir dinaminių tipų sekcijose ir pakeitė atsakymo tipą

.ashx (asinchroninis prižiūrėtojas)

 application/x-javascript 

Ir dabar radau, kad mano JSON atsakymai buvo suspausti g-zip. Todėl aš asmeniškai rekomenduoju naudoti

 application/x-javascript 

tik jei norite suspausti JSON atsakymus viešoje prieglobos aplinkoje . Kadangi jie neleidžia keisti IIS konfigūracijų bendrai naudojamame priegloboje.

282
18 апр. atsakymas pateiktas 18 val. 2012-04-18 11:22 '12 11:22 val. 2012-04-18 11:22

Tik tada, kai MIME naudojate application/json , turiu šiuos duomenis (nuo 2011 m. Lapkričio mėn. Su naujausiomis „Chrome“ versijomis „Firefox“ su „ Firebug“ ):

  • „Chrome“ nepateikė daugiau įspėjimų, kai atsisiųsti serverį iš JSON.
  • Firebug pridės skirtuką į atsakymą, rodantį JSON formatuotus duomenis. Jei MIME tipas yra kitoks, jis bus rodomas kaip „Atsakymo turinys“.
257
30 нояб. Atsakymą pateikė Ivo Limmen . 2011-11-30 09:42 '11 at 9:42 2011-11-30 09:42

Ne viskas veikia turinio tipo application/json .

Jei naudojate „ Ext JS “ failui siųsti, atminkite, kad naršyklė analizuoja serverio atsakymą, kad sukurtų dokumentą <iframe> .

Jei serveris siunčia grąžinamą objektą JSON, tuomet Content-Type antraštė turi būti nustatyta į text/html , kad naršyklė galėtų įterpti tekstą be pakeitimų į dokumento kūną.

Žr. Ext JS 3.4.0 API dokumentaciją .

232
07 сент. Conan atsakė į 07 Sep 2011-09-07 05:41 '11, 5:41 val. 2011-09-07 05:41

„JSON“ yra domeno kalba (DSL) ir duomenų formatas, nepriklausantis nuo „JavaScript“, ir todėl turi savo MIME , application/json . Žinoma, pagarba „MIME“ tipams priklauso nuo kliento, todėl text/plain gali atlikti baitų perkėlimą, bet tada jūs be reikalo interpretuosite programų teikėjo domeno - application/json interpretaciją. Ar perduodate XML per text/plain ?

Tačiau atvirai kalbant, jūsų MIME tipo pasirinkimas yra patarimas klientui, kaip interpretuoti duomenis - text/plain arba text/HTML (kai jis nėra HTML), kaip ir stilių ištrynimas - tai neinformatyvi, kaip ir visų objektų kūrimas spausdintame kalba.

Trūksta naršyklės vykdymo laiko, kurį aš žinau, kad JSON dokumentas bus automatiškai prieinamas kaip „JavaScript“ prieinamas objektas be įsikišimo, bet jei dirbate su sutrikusiu klientu, tai dar vienas klausimas. Bet tai ne visa istorija. „RESTful JSON“ paslaugos dažnai neturi „JavaScript“ autonomijos, tačiau tai netrukdo jiems naudoti JSON kaip perspektyvų duomenų mainų formatą. Jei klientai yra sugadinti ... tada manau, kad įmanoma, kad HTML injekcija būtų atliekama naudojant Ajax šabloną.

Taikymas / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 atsakymą pateikė VLostBoy gegužės 15 d., „12, 1:19 2012-05-15 01:19

Jei esate kliento aplinkoje, reikalingas tarpvalstybinis palaikymo tyrimas gerai palaikomai interneto programai.

Tinkamas HTTP turinio tipas bus application/json , nes kiti jau yra priskirti, tačiau kai kurie klientai tai neveikia labai gerai, todėl jQuery rekomenduoja naudoti numatytąjį text/html .

201
27 апр. Atsakymą pateikė Emanuele Del Grande 27 Bal. 2012-04-27 19:27 '12, 07:27 pm 2012-04-27 19:27

Teisingas atsakymas yra:

 Content-Type: application/json 
159
31 дек. atsakymą pateikė Irfanas DANISH 31 d. 2012-12-31 09:29 '13, 9:29, 2012-12-31 09:29

Kaip ir daugelis kitų, application/json yra teisingas atsakymas.

Tačiau dar nėra paaiškinta, ką reiškia kitos siūlomos galimybės.

  • application/x-javascript : Eksperimentinis „MIME“ tipas „JavaScript“ prieš application/javascript buvo standartinis.

  • text/javascript : dabar pasenusi. Naudodami „ application/javascript turite naudoti application/javascript JavaScript“.

  • text/x-javascript : Eksperimentinis MIME tipas pirmiau minėtai situacijai.

  • text/x-json : eksperimentinis MIME tipas JSON prieš application/json gavo oficialią registraciją.

Apskritai, kai kyla abejonių dėl turinio tipų, turėtumėte patikrinti šią nuorodą.

156
02 апр. atsakymas pateikiamas fcm 02 Apr 2013-04-02 14:10 '13, 14:10, 2013-04-02 14:10

JSP galite tai naudoti puslapio direktyvoje:

 <%@ page > 

Tinkamas JSON tipas JSON yra application/json . JSP jį naudos, kad atsiųstų atsakymą klientui.

139
19 янв. atsakymas pateikiamas raja 19 jan. 2013-01-19 11:22 '13, 11:22, 2013-01-19 11:22

application/json “ yra teisingas JSON turinio tipas.

 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 февр. Atsakymą pateikė Sukane 26 vasario mėn. 2013-02-26 14:55 '13, 14:55, 2013-02-26 14:55

„IANA“ registracija application/json

Programos, kuriose naudojamas šis laikmenos tipas: JSON buvo naudojamos keistis duomenimis tarp visų šių programavimo kalbų: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Jūs pastebėsite, kad IANA.org nepateikia nė vienos iš šių kitų žiniasklaidos tipų , iš tikrųjų net application/javascript yra pasenęs. Taigi, application/json yra tik teisingas atsakymas.

Naršyklės palaikymas yra dar vienas dalykas.

Dažniausiai naudojami nestandartiniai laikmenų tipai yra text/json arba text/javascript . Tačiau kai kurie dideli vardai netgi naudoja text/plain .

Net svetimas yra „Flickr“ siunčiamas turinio tipo antraštė, kuri grąžina JSON kaip text/xml . „Google“ kai kuriems iš jų naudoja text/javascript „ajax apis“.

Pavyzdžiai:

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

Išvestis: Content-Type: text/javascript

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

Išėjimas: Content-Type: text/xml

98
12 февр. Atsakymas, kurį pateikė Jhawins 12 vasaris 2014-02-12 19:12 '14, 19:12, 2014-02-12 19:12

Tinkamas tipas yra „MIME“ application/json

BET

Patyriau daug situacijų, kai man reikia naršyklės tipo ar pagrindinio vartotojo:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 atsakymas duotas LombaX gegužės 13 d. 13 val. 19:00 2013-05-03 19:00

Aš naudoju toliau

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 atsakymą Andro davė gegužės 16 d. 15 val. 2013-05-16 15:43

Skelbimo turinio tipo antraštės antraštė turi būti nustatyta kaip taikomoji programa . Serveryje, kuris klausosi užklausos, turi būti „ Accept = application / json “. Pavasario MVC galite tai padaryti taip:

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

Pridėti atsakymą į antraštes:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Atsakymas, kurį pateikė Alexander Burakevych 09 rugpjūtis 2013-08-09 13:49 '13, 13:49, 2013-08-09 13:49

Pavasarį turite konkretų tipą: „ MediaType.APPLICATION_JSON_VALUE , kuris yra lygiavertis programai / „Json“.

55
29 июня '13 в 11:34 2013-06-29 11:34 atsakymą pateikė Chand Priyankara , birželio 29 d. 13 val. 11:34 2013-06-29 11:34

application/json veikia puikiai PHP, kad išsaugotų masyvą ar duomenų objektą.

Naudoju šį kodą, kad pateiktumėte duomenis į JSON „ Google“ debesų saugykloje (GCS) , kuri yra viešai prieinama peržiūrai :

 $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 ); 

Norėdami tiesiogiai grąžinti duomenis:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Atsakymas pateikiamas Chetabahana 01 Bal. 2015-04-01 19:13 '15, 19:13, 2015-04-01 19:13

JSON naudoju:

  Content-Type: application/json 

Tai aprašyta IETF JSON duomenų mainų formato 7158 punkte, 1.2 skirsnyje: JSON specifikacijose .

47
06 февр. Atsakymą pateikė Mehmet_ 06 vasaris. 2015-02-06 15:01 '15 15:01 2015-02-06 15:01

Jei JSON yra užpildytas, tai bus application/jsonp . Jei JSON neturi jokio papildinio, tai bus application/json .

Norint su jais susidoroti, rekomenduojama naudoti: „application / javascript“, nesirūpindami, ar ji yra su įdėklu, ar be jo.

47
21 июня '13 в 18:22 2013-06-21 18:22 atsakymą pateikė „ Ankit Zalani “ birželio 13 d., 13 val. 6:22 2013-06-21 18:22

Gautų atsakymų išplėtimas naudojant JSON naudodami REST ...

Yra didelis tvirtas argumentas apie tai, kaip naudojant application/x-resource+json ir „ application/x-collection+json kai pateikiate išteklius ir REST kolekcijas.

Ir jei nuspręsite laikytis „ jsonapi“ specifikacijos, turėtumėte naudoti „ application/vnd.api+json kaip dokumentais.

Nors nėra visuotinio standarto, aišku, kad pridėtų išteklių semantika pateisina aiškesnį turinio tipą nei tik application/json .

Atsižvelgiant į šiuos aspektus, kiti kontekstai gali pateisinti konkretesnį turinio tipą.

40
09 июня '15 в 22:12 2015-06-09 22:12 atsakymas pateikiamas jgomo3 birželio 09, „15, 10:12 pm 2015-06-09 22:12

PHP kūrėjai naudoja:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 atsakymą pateikė vartotojo3087089 kovo 29 d. 14, 8:43 2014-03-29 08:43

Jei gaunate duomenis iš REST API, naudodami JSON, turite naudoti turinio tipą

 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 апр. Krišnos atsakymas, pateiktas balandžio 11 d 2016-04-11 12:15 '16 at 12:15 pm 2016-04-11 12:15

JSON („JavaScript“ objekto pavadinimas) ir „ JSONP“ („JSON su padding“) atrodo labai panašūs, todėl gali būti labai painu, kokio tipo MIME jie turėtų naudoti. Nors formatai atrodo labai panašūs, tarp jų yra keletas subtilių skirtumų.

Todėl, kai abejoju, turiu labai paprastą metodą (kuris daugeliu atvejų veikia gerai), būtent eikite ir patikrinkite atitinkamą RFC dokumentą.

JSON RFC 4627 („Application Object / Json“ „Media Object for JavaScript Objects“ (JSON)) yra JSON formato specifikacija. 6 skyriuje teigiama, kad „MIME“ multimedijos tipas JSON tekstui

 application/json. 

„JSONP JSONP“ („JSON su priedu“) naršyklėje apdorojamas kitaip nei JSON. JSONP yra laikomas įprastu „JavaScript“ scenarijumi, todėl jis turi naudoti application/javascript, dabartinį oficialų „MIME“ tipą „JavaScript“. Tačiau daugeliu atvejų text/javascript MIME tipas veiks gerai.

Atkreipkite dėmesį, kad text/javascript yra pažymėtas kaip pasenęs RFC 4329 (scenarijaus laikmenų tipai), o rekomenduojama naudoti application/javascript . Tačiau dėl paveldėtų priežasčių text/javascript vis dar plačiai naudojamas ir palaiko kryžminę naršyklę (kuri ne visada yra application/javascript MIME, ypač senesnėse naršyklėse).

23
15 февр. Iresha Rubasinghe atsakymas, pateiktas vasario 15 d. 2016-02-15 06:20 '16 at 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, BUT pasenusi, senesnės IE versijos buvo naudojamos kaip html atributas.
Content-Type: text/x-javascript - „JavaScript“ daugialypės terpės tipai, bet nebenaudojami
Content-Type: text/x-json - json prieš oficialiai užregistruojant paraišką / siužetą.

22
08 авг. Atsakymą pateikė Kashif So> 08 rug . 2017-08-08 06:49 '17 at 6:49 2017-08-08 06:49
  • 1
  • 2

Kiti klausimai apie „ žymes „ arba „ Užduoti klausimą“