Ma pole ammu esseed kirjutanud ja tunnen alati, et mul pole aega, aga tegelikult on aeg... Piisab jamast, paar päeva tagasi oli tööl uus nõue, mis nõudis, et esiosa veebileht kutsuks backend Webservice'i meetodi asünkroonselt, et info tagastada. Selle rakendamiseks on palju viise, see näide kasutab jQuery+Ajax, pärast lõpetamist on kõik okei lokaalseks silumiseks, kuid pärast serverisse juurutamist tekib probleem ja taustateenuse kutse ei reageeri, mis toimub? Kood pole palju muutunud, ainus, mis on muutunud, on URL-aadress jQuery ajax meetodis. Võib-olla on probleem selles, et pärast kontrollimist ja silumist selgub, et homoloogne poliitika on süüdi, me teame, et Javascrip{filtering}t ehk jQuery on dünaamiline skriptimistehnika, mida sageli kasutatakse veebiliidese arenduses. Javascrip{filtering}t süsteemis on oluline turvapiirang, mida tuntakse kui "Sama päritolu poliitikat". See poliitika seab olulise piirangu lehe sisule, millele Javascrip{filter}t kood pääseb ligi, st Javascrip{filtering}t pääseb ligi ainult sama domeeninime all olevale sisule kui dokument või skript, mis seda sisaldab. Skriptid erinevate domeenide all ei pääse üksteisele ligi, isegi alamdomeenid mitte. Homoloogilise strateegia kohta saavad lugejad seda Baidus üksikasjalikumalt selgitada, mida siin ei korrata.
Kuid mõnikord on vältimatu teha domeenideüleseid operatsioone ja "homoloogne poliitika" on piirang, mida peaksime tegema? Vaatame, kuidas JSONP valdkondadeülene süsteem on rakendatud ja arutleme JSONP domeenidevahelise põhimõtte üle.
Siin mainitakse JSONP-d, siis keegi küsis, mis on sellel ja JSON-il, vaatame lähemalt, Baidu entsüklopeedial on järgmine selgitus:
JSON (Javascrip{filtering}t Object Notation) on kergekaaluline andmevahetusvorming. See põhineb Javascrip{filter}t alamhulgal (Standard ECMA-262 3. väljaanne - detsember 1999). JSON kasutab täiesti keelest sõltumatut tekstiformaati, kuid kasutab ka harjumusi, mis on sarnased C perekonnale (sh C, C++, C#, Java, Javascrip, Perl, Python jne). Need omadused teevad JSON-ist ideaalse keele andmevahetuseks. Lihtne lugeda ja kirjutada inimestele, kuid ka lihtne töödelda ja masinaga genereerida (kiire võrguedastus).
JSONP (JSON koos täitmisega) on JSON-i "kasutusmuster", mida saab kasutada peavoolubrauserite domeenidevahelise andmejuurdepääsu probleemi lahendamiseks. Sama päritolu poliitika tõttu ei saa lehed, mis asuvad tavaliselt server1.example.com serveritega suhelda, mis ei ole server1.example.com, välja arvatud HTML-i <scrip{filter}t> element. Kasutades seda avatud strateegiat elemendiga <scrip{filter}t> saavad veebilehed dünaamiliselt genereeritud JSON-andmeid teistest allikatest ning seda kasutusmustrit nimetatakse JSONP-ks. JSONP-ga salvestatud andmed ei ole JSON, vaid suvalised Javascrip{filter}t, mida täidetakse Javascrip{filter}t tõlkijaga, mitte JSON-i parseriga.
Selles punktis tuleks mõista, et JSON on kerge andmevahetusvorming, nagu xml, mida kasutatakse andmete kirjeldamiseks andmete vahel. JSONP on viis JSON-andmete kasutamiseks ning selle asemel, et tagastada JSON objekt, on see javascrip{filtering}t skript, mis sisaldab JSON-objekti.
Kuidas JSONP siis töötab? Teame, et sama-päritolu poliitika piirangute tõttu lubab XmlHttpRequest päringuid ainult praegusest allikast (domeeninimi, protokoll, port). Domeenideüleised päringud ei ole turvalisuse huvides võimalikud, kuid leidsime, et kui js-faile kutsutakse veebilehtedel, ei mõjuta neid domeenideülene või mitte, ning sildid "src" atribuudiga omavad domeenideüleseid võimalusi, näiteks <scrip{filter}t>, <img>, ,<iframe>Kui soovid teha domeenideülest päringut, tee domeenideülene päring, kasutades html-i scrip{filter}t silti, ja tagasta scrip{filtering}t kood, mis täidetakse vastuses, kus saad otse JSON-iga javascrip{filter}t objekti edastada. See tähendab JSON-andmete genereerimist domeenideüleses serveris ja seejärel nende tagasi pakkimist scrip{filtering}t skripti, mis murrab läbi sama päritolu poliitika piirangud ja lahendab domeenidevahelise juurdepääsu probleemi.
Vaatame, kuidas seda saavutada:
Esiosa kood:
|