Nu am mai scris un eseu de mult timp și mereu simt că nu am timp, dar de fapt, timpul este... Destul cu prostiile, acum câteva zile a apărut o nouă cerință la serviciu, care cerea ca pagina web de la front-end să apeleze metoda backend Webservice asincron pentru a returna informațiile. Există multe moduri de a implementa asta, acest exemplu folosește jQuery+Ajax, după finalizare, totul este în regulă pentru depanare local, dar apare o problemă după implementarea pe server, iar apelul de serviciu în fundal nu răspunde, ce se întâmplă? Codul nu s-a schimbat prea mult, singurul lucru care s-a schimbat este adresa URL din metoda ajax a jQuery. Ar putea fi problema aici că, după verificare și depanare, se dovedește că politica omologă este de vină, știm că Javascrip{filtering}t sau jQuery este o tehnică de scripting dinamic folosită frecvent în dezvoltarea front-end web. În Javascrip{filtering}t, există o limitare importantă de securitate cunoscută sub numele de "Politica Aceluiași Origine". Această politică impune o restricție importantă asupra conținutului paginii la care codul Javascrip{filter}t poate accesa, adică Javascrip{filtering}t poate accesa doar conținutul sub același nume de domeniu ca documentul sau scriptul care îl conține. Scripturile din domenii diferite nu se pot accesa între ele, nici măcar subdomenii. În ceea ce privește strategia omologă, cititorii o pot explica mai detaliat despre Baidu, ceea ce nu va fi repetat aici.
Dar uneori este inevitabil să se efectueze operațiuni cross-domain, iar "politica omologă" este o limitare: ce ar trebui să facem? Să aruncăm o privire asupra modului în care este implementat JSONP cross-domain și să discutăm principiul JSONP cross-domain.
JSONP este menționat aici, apoi cineva a întrebat: care este diferența și diferența dintre el și JSON, să aruncăm o privire, Baidu Encyclopedia are următoarea explicație:
JSON (Javascrip{filtering}t Object Notation) este un format ușor de schimb de date. Se bazează pe un subset al Javascrip{filter}t (Standard ECMA-262, ediția a 3-a - decembrie 1999). JSON folosește un format de text complet independent de limbaj, dar folosește și obiceiuri similare cu familia C (inclusiv C, C++, C#, Java, Javascrip, Perl, Python etc.). Aceste caracteristici fac din JSON un limbaj ideal pentru schimbul de date. Ușor de citit și scris de către oameni, dar și ușor de analizat și generat de mașină (transmisie rapidă în rețea).
JSONP (JSON cu umplutură) este un "tipar de utilizare" al JSON, care poate fi folosit pentru a rezolva problema accesului transfrontalier la date în browserele principale. Datorită politicii de origine similară, paginile aflate în general pe server1.example.com nu pot comunica cu servere care nu sunt server1.example.com, cu excepția elementului <scrip{filter}t> din HTML. Folosind această strategie deschisă a elementului <scrip{filter}t>, paginile web pot obține date JSON generate dinamic din alte surse, iar acest tipar de utilizare este cunoscut sub numele de JSONP. Datele capturate cu JSONP nu sunt JSON, ci un Javascrip{filter}t arbitrar, care este executat cu traducătorul Javascrip{filter}t în loc să fie analizat de parserul JSON.
În acest moment, trebuie înțeles că JSON este un format ușor de schimb de date, asemănător xml, care este folosit pentru a descrie datele dintre date. JSONP este o modalitate de a folosi date JSON și, în loc să returneze un obiect JSON, este un script javascrip{filtering}t care conține un obiect JSON.
Deci, cum funcționează JSONP? Știm că, din cauza limitărilor politicii de origine similară, XmlHttpRequest permite doar solicitări pentru resurse de la sursa curentă (nume de domeniu, protocol, port). Cereri cross-domain nu sunt posibile din motive de securitate, dar am constatat că atunci când fișierele js sunt apelate pe pagini web, ele nu sunt afectate de cross-domain sau nu, iar etichetele cu atributul "src" au capabilități cross-domain, cum ar fi <scrip{filter}t>, <img>, ,<iframe>Dacă vrei să faci o cerere cross-domain, fă o cerere cross-domain folosind eticheta scrip{filter}t din html și returnează codul scrip{filtering}t care urmează să fie executat în răspuns, în care poți folosi direct JSON pentru a transmite obiectul javascrip{filter}t. Adică, generarea datelor JSON pe serverul cross-domain și apoi înfășurarea lor într-un script scrip{filtering}t înapoi, care depășește limitările politicii de origine și rezolvă problema accesului cross-domain.
Să aruncăm o privire asupra modului în care se poate realiza acest lucru:
Cod front-end:
|