Koja je ispravna vrsta JSON sadržaja?

Proveo sam neko vrijeme dok sam se zabavljao s JSON-om , samo sam ga gurnuo kao tekst i nije nikoga ozlijedio (ali znam), ali želim početi raditi kako treba.

Vidio sam toliko navodnih "standarda" za JSON vrstu sadržaja:

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

Ali što je ispravno ili bolje? Razumijem da između njih postoje sigurnosni problemi i podrška za preglednik.

Znam da postoji slično pitanje.Što je MIME tip ako JSON vraća REST API? ali želio bih malo više usredotočen odgovor.

9470
25 янв. postavila Oli 25. siječnja 2009-01-25 18:25 '09 u 18:25 2009-01-25 18:25
@ 38 odgovora
  • 1
  • 2

Za JSON tekst:

application/json

MIME vrsta medija za JSON tekst je application/json . Zadano kodiranje je UTF-8. (Izvor: RFC 4627 ).

Za JSONP (izvršni javascript) s povratnim pozivom:

application/javascript

Evo nekih postova na blogu koji su spomenuti u komentarima koji su relevantni za slučaj.

9468
25 янв. Gumbo je odgovorio 25. siječnja 2009-01-25 18:27 '09 u 18:27 2009-01-25 18:27

IANA je registrirala službeni MIME tip za JSON kao application/json .

Na pitanje zašto ne text/json , čini se da je Crockford rekao da JSON nije zapravo JavaScript, već tekst, a IANA je vjerojatnije da će proći application*" enabled="false"/> </dynamicTypes> <staticTypes> <add mimeType="text*" enabled="false"/> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true"/>

Koristeći to, .aspx stranice su komprimirane pomoću g-zip-a, ali JSON odgovori nisu bili. Dodao sam

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

u dijelovima statičkih i dinamičkih tipova. Ali to uopće ne komprimira JSON odgovore.

Nakon toga, izbrisao sam ovaj novi dodani tip i dodao

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

u dijelovima statičkih i dinamičkih tipova i promijenio vrstu odgovora u

.ashx (asinkroni upravljač) uključen

 application/x-javascript 

I sada sam otkrio da su moji JSON odgovori g-zip komprimirani. Stoga osobno preporučujem korištenje

 application/x-javascript 

samo ako želite komprimirati JSON odgovore u okruženju javnog hostinga . Zato što ne dopuštaju promjenu IIS konfiguracija na hosting.

282
18 апр. odgovor je dao shashwat 18 apr. 2012-04-18 11:22 '12 u 11:22 2012-04-18 11:22

Samo kada upotrebljavam application/json kao MIME , imam sljedeće (od studenog 2011. s najnovijim verzijama Chromea, Firefox s Firebugom ):

  • Nema više upozorenja s Chromea prilikom preuzimanja JSON-a s poslužitelja.
  • Firebug će dodati odgovor na odgovor koji prikazuje JSON formatirane podatke. Ako je MIME tip različit, on će biti prikazan kao "Sadržaj odgovora".
257
30 нояб. Odgovor daje Ivo Limmen 30.11. 2011-11-30 09:42 '11 u 9:42 2011-11-30 09:42

Nije sve u application/json vrste sadržaja application/json .

Ako za slanje datoteke koristite Ext JS , imajte na umu da preglednik analizira odgovor poslužitelja kako bi stvorio dokument za <iframe> .

Ako poslužitelj koristi JSON za slanje vraćenog objekta, onda zaglavlje Content-Type mora biti postavljeno na text/html da bi pregledalo umetnulo tekst bez promjena u tijelo dokumenta.

Pogledajte dokumentaciju API-ja Ext JS 3.4.0 .

232
07 сент. Conan je odgovorio 07 rujna 2011-09-07 05:41 '11 u 5:41 am 2011-09-07 05:41

JSON je jezik domene (DSL) i format podataka koji je neovisan o JavaScriptu i kao takav ima vlastiti MIME , application/json . Poštivanje MIME tipova, naravno, ovisi o klijentu, tako da text/plain može učiniti za prijenos bajtova, ali tada ćete nepotrebno protumačiti tumačenje domene davatelja application/json - application/json . Prolazite li XML putem text/plain ?

Ali iskreno, vaš izbor MIME tipa je savjet klijentu o tome kako protumačiti podatke - text/plain ili text/HTML (kada to nije HTML) - poput stilova brisanja - to je neinformativno, kao što je stvaranje svih vaših objekata na tipkanju jezik.

Nedostatak vremena izvršenja preglednika, za koje znam da će uzeti JSON dokument i automatski ga učiniti dostupnim za vrijeme izvođenja kao objekt dostupan JavaScriptu, bez intervencije, ali ako radite s osakaćenim klijentom, to je druga stvar. Ali to nije cijela priča. RESTful JSON usluge često nemaju JavaScript autonomiju, ali to ih ne sprječava da koriste JSON kao održiv format razmjene podataka. Ako su klijenti oštećeni ... onda mislim da je moguće da se injekcija HTML-a obavlja pomoću Ajaxovog predloška.

Aplikacija / JSON!

217
15 мая '12 в 1:19 2012-05-15 01:19 odgovor je dao VLostBoy 15. svibnja '12 u 1:19 2012-05-15 01:19

Ako se nalazite u okruženju klijentske strane, potrebno je istraživanje podrške za više preglednika za dobro podržanu web-aplikaciju.

Ispravan HTTP Content-Type će biti application/json , budući da su i drugi već dodijeljeni, ali neki klijenti to ne obrađuju jako dobro, tako da jQuery preporučuje korištenje zadanog text/html .

201
27 апр. Odgovor daje Emanuele Del Grande 27. travnja. 2012-04-27 19:27 '12 u 7:27 pm 2012-04-27 19:27

Točan odgovor je:

 Content-Type: application/json 
159
31 дек. odgovor je dao Irfan DANISH 31 dec. 2012-12-31 09:29 '13 u 9:29 2012-12-31 09:29

Kao i mnogi drugi, application/json je pravi odgovor.

Ali još nije objašnjeno koje su to druge opcije koje nudite.

  • application/x-javascript : Eksperimentalni MIME tip za JavaScript prije application/javascript bio je standardni.

  • text/javascript : sada je zastario. Kada koristite application/javascript morate koristiti application/javascript javascript.

  • text/x-javascript : Eksperimentalni MIME tip za gore navedenu situaciju.

  • text/x-json : eksperimentalni MIME tip za JSON prije application/json primio je službenu registraciju.

Općenito, kad god sumnjate u vrste sadržaja, provjerite ovu vezu.

156
02 апр. odgovor je dat fcm 02 Apr 2013-04-02 14:10 '13 u 14:10 2013-04-02 14:10

U JSP-u to možete koristiti u direktivi stranice:

 <%@ page > 

Ispravan MIME tip za JSON je application/json . JSP će ga koristiti za slanje odgovora klijentu.

139
19 янв. odgovor je dan raja 19 jan. 2013-01-19 11:22 '13 u 11:22 2013-01-19 11:22

" application/json " je ispravna vrsta JSON sadržaja.

 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 февр. Odgovor daje Sukane 26. veljače. 2013-02-26 14:55 '13 u 14:55 2013-02-26 14:55

IANA registracija za application/json kaže

Aplikacije koje koriste ovu vrstu medija: JSON je korišten za razmjenu podataka između aplikacija napisanih na svim ovim programskim jezicima: ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Er>

Primijetit ćete da IANA.org ne navodi niti jednu od ovih drugih vrsta medija , čak je i application/javascript zastario. Dakle, application/json je doista jedini točan odgovor.

Podrška preglednika je još jedna stvar.

Najčešći tipovi nestandardnih medija su text/json ili text/javascript . Ali neka velika imena koriste text/plain .

Čak i stranac je Content-Type zaglavlje koje šalje Flickr, koji vraća JSON kao text/xml . Google koristi text/javascript za neke od njih ajax apis.

primjeri:

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

Izlaz: Content-Type: text/javascript

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

Izlaz: Content-Type: text/xml

98
12 февр. Odgovor dao Jhawins 12. veljače 2014-02-12 19:12 '14 u 19:12 2014-02-12 19:12

Ispravna vrsta je MIME application/json

ALI

Doživio sam mnoge situacije kada trebam vrstu preglednika ili korisnika okvira:

 text/html application/javascript 
83
03 мая '13 в 19:00 2013-05-03 19:00 odgovor je dat LombaX 03 Svibanj '13 u 19:00 2013-05-03 19:00

Koristim ispod

 contentType: 'application/json', data: JSON.stringify(SendData), 
70
16 мая '13 в 15:43 2013-05-16 15:43 odgovor je dao Andro 16. svibnja '13. u 15:43 2013-05-16 15:43

Zaglavlje zaglavlja Content-Type treba biti postavljeno na application / json prilikom objavljivanja. Poslužitelj koji sluša zahtjev mora sadržavati " Accept = application / json ". U proljetnom MVC to možete učiniti na sljedeći način:

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

Dodajte zaglavlja odgovoru:

 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); 
62
09 авг. Odgovor dao Alexander Burakevych 09 Aug. 2013-08-09 13:49 '13 u 13:49 2013-08-09 13:49

U proljeće imate određenu vrstu: MediaType.APPLICATION_JSON_VALUE , što je ekvivalentno aplikaciji / json.

55
29 июня '13 в 11:34 2013-06-29 11:34 odgovor je dao Chand Priyankara 29. lipnja '13. u 11:34 2013-06-29 11:34

application/json dobro radi u PHP-u za spremanje polja ili objekta podataka.

Koristim ovaj kôd za stavljanje podataka u JSON na Google Cloud Storage (GCS) , koji je javno dostupan za gledanje :

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

Za izravno slanje podataka:

 $data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json")); 
55
01 апр. Odgovor je dan Chetabahana 01 Apr. 2015-04-01 19:13 '15 u 19:13 2015-04-01 19:13

Za JSON koristite:

  Content-Type: application/json 

To je opisano u klauzuli IETF JSON formata razmjene podataka 7158, odjeljak 1.2: JSON specifikacije .

47
06 февр. Odgovor daje Mehmet_ 06. veljače. 2015-02-06 15:01 '15 u 15:01 2015-02-06 15:01

Ako je JSON popunjen, to će biti application/jsonp . Ako JSON nema dodatak, to će biti application/json .

Da bi se nosili s njima, preporuča se koristiti: "application / javascript", bez brige o tome je li s ili bez podupirača.

47
21 июня '13 в 18:22 2013-06-21 18:22 odgovor daje Ankit Zalani 21. lipnja '13. u 6:22 2013-06-21 18:22

Proširenje primljenih odgovora kada koristite JSON u kontekstu REST-a ...

Postoji jak argument o korištenju application/x-resource+json i application/x-collection+json kada prezentirate resurse i REST zbirke.

Ako odlučite slijediti jsonapi specifikaciju, trebate koristiti application/vnd.api+json kako je dokumentirano.

Iako ne postoji univerzalni standard, jasno je da dodana semantika prenesenih resursa opravdava eksplicitniji Content-Type od samo application/json .

Slijedeći ova razmatranja, drugi konteksti mogu opravdati specifičniji tip sadržaja.

40
09 июня '15 в 22:12 2015-06-09 22:12 odgovor je dan jgomo3 9. lipnja '15 u 22:12 sati 2015-06-09 22:12

PHP programeri koriste ovo:

 <?php header("Content-type: application/json"); // Do something here... ?> 
39
29 марта '14 в 8:43 2014-03-29 08:43 odgovor daje korisnik3087089 29. ožujka 2014. u 8:43 2014-03-29 08:43

Ako dobijete podatke iz REST API-ja u JSON-u, morate koristiti vrstu sadržaja

 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 апр. Odgovor koji je Krišna dao 11. travnja 2016-04-11 12:15 '16 u 12:15 sati 2016-04-11 12:15

Čini se da su JSON (JavaScript Object Designation) i JSONP ("JSON s padding") vrlo slični, te stoga može biti vrlo zbunjujuće koju vrstu MIME-a trebaju koristiti. Iako se čini da su formati vrlo slični, među njima postoje neke suptilne razlike.

Stoga, kad god sumnjam, imam vrlo jednostavan pristup (koji je u redu u većini slučajeva), naime, idite i provjerite odgovarajući RFC dokument.

JSON RFC 4627 (Vrsta aplikacije / json Media za određivanje JavaScript objekata (JSON)) je specifikacija JSON formata. Odjeljak 6 navodi da MIME vrsta multimedije za JSON tekst

 application/json. 

JSONP JSONP ("JSON s dodatkom") obrađuje se drugačije od JSON-a u pregledniku. JSONP se tretira kao regularna JavaScript skripta i stoga mora koristiti application/javascript, trenutni službeni MIME tip za JavaScript. U mnogim slučajevima, međutim, text/javascript MIME tip će raditi.

Imajte na umu da je text/javascript označen kao zastarjeli RFC 4329 (Scripting Media Types), a umjesto njega se preporučuje uporaba application/javascript . Međutim, zbog naslijeđenih razloga, text/javascript je još uvijek široko korišten i podržava cross-browser (što nije uvijek tip application/javascript MIME, osobito u starijim preglednicima).

23
15 февр. odgovor koji je dao Iresha Rubasinghe 15. veljače. 2016-02-15 06:20 '16 u 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, ALI zastarjele, starije verzije IE-a korištene su kao atribut html.
Content-Type: text/x-javascript - Vrste multimedijskih JavaScript-a ALI Zastarjele
Content-Type: text/x-json - json prije službene registracije aplikacije / json.

22

Ostala pitanja o oznakama ili Postavi pitanje