Come effettuare una richiesta di dominio incrociato

Come sapete, la sicurezza del browser Web non consente di effettuare richieste interdominio. Ho letto un libro che dice che dovresti usare XMLHTTPRequest solo se puoi mettere i file sul server (significa mettere la pagina che caricerai nello stesso dominio richiesto). Se non puoi – dovresti cercare un’alternativa.

Le mie domande sono :

  1. Qual è l’alternativa del dominio incrociato a XMLHTTPRequest?
  2. Che mi dici di WebSockets ? Questa tecnologia consente la richiesta interdominio?

EDIT: Non mi è ancora chiaro …

Ad esempio, estraggo la mia pagina da www.domain1.com e devo richiedere javascript da www.domain2.com . Quindi la pagina tirata dovrebbe includere qualcosa come:

 

per evitare le restrizioni del dominio incrociato.

E posso usare JSONP, e la richiesta sarà simile a: http://ww.domain1.com/?callback=someFunction.js

Ma: non è lo stesso? Prendo solo js da un altro dominio! Evita le restrizioni del dominio incrociato?

È ansible effettuare richieste di domini incrociati utilizzando l’object XMLHttpRequest . Questo viene fatto usando qualcosa chiamato “Cross Origin Resource Sharing”. Vedi: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Molto semplicemente, quando la richiesta viene effettuata sul server, il server può rispondere con un’intestazione Access-Control-Allow-Origin che consente o rifiuta la richiesta. Il browser deve controllare questa intestazione e se è consentita, continuerà con il processo di richiesta. In caso contrario, il browser annullerà la richiesta.

Puoi trovare ulteriori informazioni e un esempio operativo qui: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xxaintainquest.html

JSONP è una soluzione alternativa, ma potresti obiettare che è un po ‘un trucco.

Effettua una chiamata AJAX interdominio

Il tuo servizio web deve supportare l’iniezione di metodi per fare JSONP.

Il tuo codice sembra buono e dovrebbe funzionare se i tuoi servizi web e la tua applicazione web sono ospitati nello stesso dominio.

Quando si esegue $ .ajax con dataType: ‘jsonp’ significa che jQuery sta effettivamente aggiungendo un nuovo parametro all’URL della query.

Ad esempio, se il tuo URL è http://10.211.2.219:8080/SampleWebService/sample.do allora jQuery aggiungerà? Callback = {some_random_dynamically_generated_method}.

Questo metodo è più gentile di un proxy effettivamente collegato nell’object finestra. Questo non è nulla di specifico ma assomiglia a qualcosa del genere:

 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); } 

Controlla quanto segue per ulteriori informazioni

http://json-p.org/

Crea una richiesta JSONP ajax tra più domini con jQuery

Se sei disposto a trasmettere alcuni dati e non hai bisogno di essere protetto (nessuna informazione pubblica) puoi usare un proxy CORS, è molto semplice, non dovrai modificare nulla nel tuo codice o sul lato server (specialmente non è il tuo server come l’API di Yahoo o OpenWeather). L’ho usato per recuperare i file JSON con un XMLHttpRequest e ha funzionato bene.