jQuery Ajax Notes
- Ze względu na ograniczenia bezpieczeństwa przeglądarki większość żądań Ajax podlega tym samym zasadom pochodzenia ; żądanie nie może pomyślnie pobrać danych z innej domeny, subdomeny, portu lub protokołu.
- Żądania skryptów i JSONP nie podlegają tym samym ograniczeniom zasad pochodzenia.
Istnieje kilka sposobów na pokonanie bariery międzydomenowej :
Istnieje kilka wtyczek, które pomagają w przypadku żądań między domenami :
Heads-up!
Najlepszym sposobem rozwiązania tego problemu jest utworzenie własnego serwera proxy na zapleczu, tak aby serwer proxy wskazywał usługi w innych domenach, ponieważ w zapleczu nie istnieje takie samo ograniczenie zasad pochodzenia . Ale jeśli nie możesz tego zrobić na zapleczu, zwróć uwagę na następujące wskazówki.
Ostrzeżenie!
Korzystanie z serwerów proxy innych firm nie jest bezpieczną praktyką, ponieważ mogą one śledzić Twoje dane, dzięki czemu można ich używać z informacjami publicznymi, ale nigdy z danymi prywatnymi.
Poniższe przykłady kodu używają jQuery.get () i jQuery.getJSON () , oba są skrótami metod jQuery.ajax ()
CORS Anywhere
CORS Anywhere to serwer proxy node.js, który dodaje nagłówki CORS do żądania, które jest przesyłane przez serwer proxy .
Aby skorzystać z interfejsu API, wystarczy poprzedzić adres URL adresem URL interfejsu API. (Obsługuje https : zobacz repozytorium github )
Jeśli chcesz automatycznie włączać żądania między domenami w razie potrzeby, użyj następującego fragmentu kodu:
$.ajaxPrefilter( function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
Niezależnie od pochodzenia
Niezależnie od pochodzenia jest to międzydomenowy dostęp jsonp . Jest to alternatywa typu open source dla anyorigin.com .
Aby pobrać dane z google.com, możesz użyć tego fragmentu:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
$("#viewer").html(data.contents);
});
Pełnomocnik CORS
CORS Proxy to prosty serwer proxy node.js, który umożliwia wysyłanie żądań CORS do dowolnej witryny internetowej. Umożliwia kodowi javascript w Twojej witrynie dostęp do zasobów w innych domenach, które normalnie byłyby blokowane ze względu na zasady tego samego pochodzenia.
Jak to działa? CORS Proxy korzysta z współdzielenia zasobów między źródłami, które jest funkcją dodaną wraz z HTML 5. Serwery mogą określić, że chcą, aby przeglądarki zezwalały innym witrynom na żądanie zasobów, które hostują. CORS Proxy to po prostu serwer proxy HTTP, który dodaje nagłówek do odpowiedzi mówiący „każdy może o to poprosić”.
To kolejny sposób na osiągnięcie celu (patrz www.corsproxy.com ). Wszystko, co musisz zrobić, to usunąć http: // i www. z adresu URL, który ma być proxy, i wstaw go na początkuwww.corsproxy.com/
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
Przeglądarka proxy CORS
Niedawno znalazłem ten, który obejmuje różne zorientowane na bezpieczeństwo narzędzia do zdalnego udostępniania Cross Origin. Ale jest to czarna skrzynka z Flash'em jako zapleczem.
Możesz zobaczyć to w akcji tutaj: Przeglądarka proxy CORS
Pobierz kod źródłowy na GitHub: koto / cors-proxy-browser