Accesso al servizio Web da jQuery – cross domain

Sto cercando di accedere a un servizio wcf da un client jQuery

In particolare questo esempio http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

Tutto funziona bene quando la pagina Web del client si trova nello stesso dominio del servizio

Non appena sposto la pagina web del client in un altro dominio, si rompe. Non è ansible raggiungere il servizio e la richiesta non riesce

Questo succede per tutti gli esempi, ASMX, REST e WCF

qualche idea su come ottenere questo lavoro daomain cross?

Stai andando contro la politica della stessa origine. Il servizio Web a cui si accede deve risiedere nello stesso dominio dello script jQuery che sta effettuando la richiesta. Questo criterio viene applicato da tutti i browser per impedire, ad esempio, lo scripting cross-site e gli attacchi di code injection sulle applicazioni Web.

Ci sono vari modi per aggirarlo, inclusi JSONP, Proxy o Flash.

Avremo bisogno di un po ‘più di informazioni prima di poter suggerire quale tecnica utilizzare. Tendo a favorire JSONP . Ma nel frattempo, ecco alcune letture leggere:

http://taossa.com/index.php/2007/02/08/same-origin-policy/

https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript

Ecco un esempio di utilizzo di JSONP:

url = "http://www.test.com/getData.php?callback=parseResults"; document.body.appendChild((function() { var newScript = document.createElement("script"); newScript.type = "text/javascript"; newScript.src = url; return newScript; })()); function parseResults(data) { alert(data); } 

Potresti voler controllare JSONP (JSON con Padding) . In breve, comporta l’aggiunta di un elemento di script alla pagina con l’URL del servizio web come src. Il servizio Web avvolge quindi il JSON come primo argomento in una funzione di callback, che viene eseguita quando viene analizzato lo script.

Gli elementi di script sono esenti dalla stessa politica di origine , che è il modo in cui sono in grado di aggirare questo problema.

In genere, non sarai in grado di; i browser moderni limitano questo per prevenire attacchi di cross-site scripting. Un modo per aggirarlo potrebbe essere utilizzare JSON “riempito”, JSONP, che inserisce i risultati in un elemento di script sulla tua pagina. C’è un esempio di Microsoft WCF qui che sembra farlo.

Ho affrontato lo stesso problema durante 2 giorni e ho trovato la soluzione, ed è elegante dopo aver fatto ricerche su Google. Avevo bisogno di xss Ajax per alcuni client di widget che estraevano il stream di dati dai siti Web di livelli alla mia app Rails. ecco come ho fatto.