Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 12584|Odpowiedź: 0

[Szarpanie] JSONP - Rozwiązanie problemu dostępu międzydomenowego w Ajaxie

[Skopiuj link]
Opublikowano 28.12.2015 14:22:00 | | |

Nie pisałem eseju od dawna i zawsze czuję, że nie mam czasu, ale tak naprawdę czas jest... Dość bzdur, kilka dni temu pojawił się nowy wymóg, który wymagał, by strona front-endowa wywoływała metodę backendu Webservice asynchronicznie, aby zwracać informacje. Jest wiele sposobów na implementację, ten przykład używa jQuery+Ajax, po ukończeniu wszystko można debugować lokalnie, ale po wdrożeniu na serwerze pojawia się problem, a wywołanie usługi w tle nie reaguje, co się dzieje? Kod nie zmienił się zbytnio, jedyną rzeczą, która się zmieniła, jest adres URL w metodzie ajax w jQuery. Czy problem może polegać na tym, że po sprawdzeniu i debugowaniu okazuje się, że błędem jest homologiczna polityka? Wiemy, że Javascrip{filtering}t lub jQuery to dynamiczna technika skryptowania często stosowana w web-front-endzie. W Javascrip{filtering}t istnieje ważne ograniczenie bezpieczeństwa znane jako "Polityka Same-Origin". Ta polityka nakłada istotne ograniczenie dotyczące zawartości strony, do której kod Javascrip{filter}t może mieć dostęp, tj. Javascrip{filtering}t może uzyskać dostęp tylko do treści pod tą samą domeną co dokument lub skrypt, który ją zawiera. Skrypty pod różnymi domenami nie mogą mieć do siebie dostępu, nawet do subdomen. Jeśli chodzi o strategię homologiczną, czytelnicy mogą wyjaśnić ją bardziej szczegółowo na Baidu, co tutaj nie będzie powtarzane.



Ale czasem nieuniknione jest przeprowadzanie operacji międzydomenowych, a "polityka homologiczna" jest ograniczeniem – co powinniśmy zrobić? Przyjrzyjmy się, jak implementuje się JSONP w różnych dziedzinach i omówmy zasadę JSONP w zakresie międzydomenowym.



JSONP jest tu wspomniany, potem ktoś zapytał, jaka jest różnica między nim a JSON? Przyjrzyjmy się temu, Encyklopedia Baidu zawiera następujące wyjaśnienie:

JSON (Javascrip{filtering}t Object Notation) to lekki format wymiany danych. Opiera się na podzbiorze Javascrip{filter}t (Standard ECMA-262 3. wydanie - grudzień 1999). JSON używa całkowicie niezależnego od języka formatu tekstowego, ale także stosuje nawyki podobne do rodziny C (w tym C, C++, C#, Java, Javascrip, Perl, Python itd.). Te cechy czynią JSON idealnym językiem do wymiany danych. Łatwe do czytania i zapisu przez ludzi, ale także łatwe do analizy i generowania przez maszynę (szybka transmisja sieciowa).

JSONP (JSON z dopasowującym materiałem) to "wzorzec użytkowania" JSON, który może być używany do rozwiązania problemu dostępu do danych międzydomenowych w głównych przeglądarkach. Ze względu na politykę dotyczącą tego samego źródła, strony zazwyczaj znajdujące się na server1.example.com nie mogą komunikować się z serwerami, które nie są server1.example.com, z wyjątkiem elementu <scrip{filter}t> w HTML. Korzystając z tej otwartej strategii elementu <scrip{filter}t>, strony internetowe mogą dynamicznie generować dane JSON z innych źródeł, a ten wzorzec użytkowania znany jest jako JSONP. Dane zebrane za pomocą JSONP to nie JSON, lecz dowolny Javascrip{filter}t, który jest wykonywany za pomocą tłumacza Javascrip{filter}t zamiast parsowanego przez parser JSON.



Należy zrozumieć, że JSON to lekki format wymiany danych, podobny do xml, który służy do opisu danych między danymi. JSONP to sposób na wykorzystanie danych JSON i zamiast zwracać obiekt JSON, jest to skrypt javascrip{filtering}t zawierający obiekt JSON.



Jak działa JSONP? Wiemy, że ze względu na ograniczenia polityki tego samego źródła, XmlHttpRequest pozwala na żądania tylko zasobów z aktualnego źródła (nazwa domeny, protokół, port). Żądania międzydomenowe nie są możliwe ze względów bezpieczeństwa, ale odkryliśmy, że gdy pliki js są wywoływane na stronach internetowych, nie są one podatne na działanie międzydomenowe ani nie, a tagi z atrybutem "src" mają możliwości międzydomenowe, takie jak <scrip{filter}t>, <img>, ,<iframe>Jeśli chcesz wykonać żądanie międzydomenowe, zrób żądanie międzydomenowe, używając tagu scrip{filter}t w html, i zwróć kod scrip{filtering}t do wykonania w odpowiedzi, gdzie możesz bezpośrednio użyć JSON do przekazania obiektu javascrip{filter}t. Oznacza to generowanie danych JSON na serwerze międzydomenowym, a następnie opakowanie ich w skrypt scrip{filtering}t, co łamie ograniczenia polityki tego samego źródła i rozwiązuje problem dostępu międzydomenowego.

Przyjrzyjmy się, jak to osiągnąć:

Kod front-endowy:






Poprzedni:Wartości delegatów między formami Winform
Następny:Uruchom wiele usług Memcached na tym samym komputerze z Windows
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com