Régóta nem írtam esszét, és mindig úgy érzem, nincs időm, de valójában az idő... Elég a hülyeségből, néhány nappal ezelőtt új követelmény jelent meg, amely előírta, hogy a front-end weboldal aszinkron módon hívja a backend Webservice módszert, hogy visszaküldje az információkat. Sokféleképpen lehet megvalósítani, ez a példa jQuery+Ajax rendszert használ, a befejezés után minden rendben van a helyi hibakereséshez, de a szerveren való telepítés után probléma van, és a háttérben lévő szolgáltatáshívás nem reagál, mi történik? A kód nem változott sokat, az egyetlen dolog, ami megváltozott, az URL cím a jQuery ajax módszerében. Lehet, hogy a probléma az, hogy ellenőrzés és hibakeresés után kiderül, hogy a homológ politika hibás, tudjuk, hogy a Javascrip{filtering}t vagy jQuery egy dinamikus szkript-technika, amelyet gyakran használnak webfront-end fejlesztésben. A Javascrip{filtering}t programban van egy fontos biztonsági korlátozás, amelyet "Ugyanaz eredetű szabályzatnak" neveznek. Ez a szabályzat fontos korlátozást szab az oldal tartalmára, amelyhez a Javascrip{filter}t kód hozzáférhet, azaz a Javascrip{filtering}t csak ugyanazon a domain néven érhető el, mint a dokumentum vagy a script, amely tartalmazza. A különböző domainek alatt lévő szkriptek nem férhetnek hozzá, még az aldomainek sem. A homológ stratégiával kapcsolatos olvasók részletesebben is elmagyarázhatják a Baidu-n, amit itt nem fogunk ismételni.
De néha elkerülhetetlen a területek közötti műveletek végrehajtása, és a "homológ politika" korlát, mit kellene tennünk? Nézzük meg, hogyan valósítják meg a JSONP cross-domain rendszerét, és beszéljük meg a JSONP cross-domain elvét.
Itt említik a JSONP-t, majd valaki megkérdezte, mi a különbség és különbség a JSON és között, nézzük meg, a Baidu enciklopédia a következő magyarázatot tartalmazza:
A JSON (Javascrip{filtering}t Object Notation) egy könnyű adatcsere formátum. A Javascrip{filter}t (Standard ECMA-262 3. kiadás - 1999. december) egy részhalmazán alapul. A JSON teljesen nyelvfüggetlen szövegformátumot használ, de hasonló szokásokat is alkalmaz a C családhoz (beleértve a C, C++, C#, Java, Javascrip, Perl, Python stb.). Ezek a funkciók a JSON-t ideális nyelvmé teszik az adatcseréhez. Könnyű olvasni és írni az embereknek, de géppel is könnyen értelmezhető és generálható (gyors hálózati átvitel).
A JSONP (JSON PAMP-olcsolással) a JSON "használati mintája", amely a főáramú böngészők cross-domain adathozzáférésének problémájának megoldására használható. Az azonos eredetű szabályzat miatt a server1.example.com-n található oldalak általában nem kommunikálhatnak olyan szerverekkel, amelyek nem server1.example.com, kivéve a HTML <scrip{filter}t> elemét. A <scrip{filter}t> elem nyílt stratégiájával a weboldalak dinamikusan generált JSON adatokat kaphatnak más forrásokból, és ezt a használati mintát JSONP-nek nevezik. A JSONP-vel rögzített adatok nem JSON, hanem tetszőleges Javascrip{filter}t, amelyet a Javascrip{filter}t fordítóval hajtanak végre, nem pedig a JSON parser.
Ezen a ponton meg kell érteni, hogy a JSON egy könnyű adatcsere formátum, mint az xml, amelyet az adatok közötti adatok leírására használnak. A JSONP egy módja a JSON adatok használatának, és a JSON objektum visszaadása helyett egy javascrip{filtering}t szkript, amely tartalmaz egy JSON objektumot.
Hogyan működik a JSONP? Tudjuk, hogy az azonos eredetű politika korlátai miatt az XmlHttpRequest csak a jelenlegi forrásból (domain név, protokoll, port) származó erőforrások kérését engedélyezi. A tartományok közötti kérések biztonsági okokból nem lehetségesek, de azt tapasztaltuk, hogy amikor a js fájlokat weboldalakon hívják, nem érinti őket a cross-domain vagy sem, és az "src" attribútumú címkék cross-domain képességekkel rendelkeznek, például <scrip{filter}t>, <img>,<iframe>Ha tartományokon át szeretnél kérni, akkor a html scrip{filter}t címkéjével küldj vissza a scrip{filtering}t kódot, amely a válaszban futtatható scrip{filtering}t kódot adja, amelyben közvetlenül a JSON-t segítségével továbbíthatod a javascrip{filter}t objektumot. Vagyis a JSON adat generálása a különböző tartományú szerveren, majd visszacsomagolja azokat egy scrip{filtering}t szkripté, ami áttöri az azonos eredetű politika korlátait, és megoldja a tartományok közötti hozzáférés problémáját.
Nézzük meg, hogyan lehet ezt elérni:
Front-end kód:
|