2013-07-26 20 views
29

Jak wiadomo, bezpieczeństwo przeglądarki uniemożliwia tworzenie żądań między domenami. Przeczytałem książkę, która mówi, że powinieneś używać XMLHTTPRequest tylko wtedy, gdy możesz umieścić pliki na serwerze (czyli umieścić stronę, którą załadujesz do tej samej, żądanej domeny). Jeśli nie możesz - powinieneś poszukać alternatywy.Jak utworzyć żądanie domeny krzyżowej

Moje pytania są:

  1. Co jest krzyż alternatywa domeny XMLHttpRequest?
  2. Co z WebSockets? Czy ta technologia pozwala na żądanie domeny krzyżowej?

EDIT: To nadal nie jest dla mnie jasne ...

Na przykład, ja ciągnąć moją stronę z www.domain1.com i muszę poprosić JavaScript z www .domain2.com. Dlatego strona wyciągnięta powinna zawierać coś w stylu:

<script src="www.domain2.com/script.js"></script> 

w celu uniknięcia ograniczeń między domenami.

I mogę użyć jsonp, a wniosek będzie wyglądać następująco: http://ww.domain1.com/?callback=someFunction.js

Ale: nie jest to samo? Po prostu ściągam js z innej domeny! Czy unika ograniczeń między domenami?

+0

[Ten artykuł na temat MDN wyjaśnia problem i rozwiązania całkiem dobrze] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) – Liam

Odpowiedz

4

Wykonaj AJAX połączenia między domenami

Twój serwis internetowy musi obsługiwać zastrzyk metoda w tym celu jsonp.

Twój kod wydaje się być prawidłowy i powinien działać, jeśli Twoje usługi sieciowe i aplikacja internetowa są hostowane w tej samej domenie.

Po wykonaniu $ .ajax z dataType: 'jsonp' oznacza, że ​​jQuery faktycznie dodaje nowy parametr do adresu URL zapytania.

Na przykład, jeśli adres URL to http://10.211.2.219:8080/SampleWebService/sample.do, to jQuery doda? Callback = {some_random_dynamically_generated_method}.

Ta metoda jest raczej rodzajem proxy aktualnie dołączonym do obiektu okna. Jest to nic konkretnego, ale wygląda mniej więcej tak:

window.some_random_dynamically_generated_method = function(actualJsonpData) { 
    //here actually has reference to the success function mentioned with $.ajax 
    //so it just calls the success method like this: 
    successCallback(actualJsonData); 
} 

Sprawdź następujące elementy, aby uzyskać więcej informacji

http://json-p.org/

Make cross-domain ajax JSONP request with jQuery

+0

tak, dziękuję. Ale czy możesz podać odpowiedź na pytanie EDYTUJ obszar, proszę –

18

Można dokonać wzajemnych żądań domen użyciu obiektu XMLHttpRequest. Odbywa się to za pomocą czegoś, co nazywa się "Cross Origin Resource Sharing".Zobacz: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Bardzo po prostu, gdy wniosek został złożony do serwera serwer może reagować z Access-Control-Allow-Origin nagłówka, który będzie albo umożliwić lub zablokować żądanie. Przeglądarka musi sprawdzić ten nagłówek, a jeśli jest dozwolony, będzie kontynuował proces żądania. Jeśli nie, przeglądarka anuluje żądanie.

można znaleźć więcej informacji oraz przykładowe pracy tutaj: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

JSONP jest alternatywnym rozwiązaniem, ale można argumentować, że to trochę hack.

+0

Twierdzę, że jest to również trochę hack. Nie powstrzymuje mnie to jednak przed użyciem! :RE –

3

Jeśli chcesz przesłać dane i nie musisz być zabezpieczony (jakiekolwiek informacje publiczne) możesz użyć proxy CORS, to bardzo proste, nie będziesz musiał niczego zmieniać w swoim kodzie lub po stronie serwera (szczególnie, że nie jest to twój serwer, taki jak Yahoo API lub OpenWeather). Użyłem go do pobrania plików JSON z XMLHttpRequest i działało dobrze.