Como fazer pedido de domínio cruzado

Como você sabe, a segurança do navegador da web proíbe a realização de solicitações entre domínios. Eu li um livro que diz que você deve usar XMLHTTPRequest somente se você pode colocar os arquivos no servidor (significa colocar a página que você irá carregar para o mesmo domínio solicitado). Se você não pode – você deve procurar por uma alternativa.

Minhas perguntas são :

  1. Qual é a alternativa de domínio cruzado para XMLHTTPRequest?
  2. E quanto a WebSockets ? Esta tecnologia permite a solicitação entre domínios?

EDIT: Ainda não está claro para mim …

Por exemplo, eu puxo minha página de www.domain1.com e preciso solicitar o javascript de www.domain2.com . Então a página puxada deve include algo como:

 

para evitar restrições de domínio cruzado.

E eu posso usar o JSONP, e o pedido será parecido com: http://ww.domain1.com/?callback=someFunction.js

Mas não é o mesmo? Eu só puxo js de outro domínio! Evita restrições de domínio cruzado?

Você pode fazer solicitações entre domínios usando o object XMLHttpRequest . Isso é feito usando algo chamado “Cross Origin Resource Sharing”. Veja: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Muito simplesmente, quando a solicitação é feita ao servidor, o servidor pode responder com um header Access-Control-Allow-Origin que permitirá ou negará a solicitação. O navegador precisa verificar este header e, se permitido, continuará com o processo de solicitação. Se não, o navegador cancelará a solicitação.

Você pode encontrar mais algumas informações e um exemplo de trabalho aqui: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

O JSONP é uma solução alternativa, mas você poderia argumentar que é um truque.

Fazer uma chamada AJAX entre domínios

Seu serviço da web deve suportar injeção de método para fazer JSONP.

Seu código parece bem e deve funcionar se seus serviços da Web e seu aplicativo da Web estiverem hospedados no mesmo domínio.

Quando você faz um $ .ajax com dataType: ‘jsonp’ significa que o jQuery está realmente adicionando um novo parâmetro à URL da consulta.

Por exemplo, se seu URL for http://10.211.2.219:8080/SampleWebService/sample.do , o jQuery adicionará? Callback = {some_random_dynamically_generated_method}.

Esse método é mais um tipo de proxy realmente anexado ao object window. Isso não é específico, mas se parece com algo assim:

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

Verifique o seguinte para mais informações

http://json-p.org/

Faça uma solicitação JSONP de ajax entre domínios com jQuery

Se você estiver disposto a transmitir alguns dados e não precisar ser protegido (qualquer informação pública) você pode usar um proxy CORS, é muito fácil, você não precisará alterar nada no seu código ou no lado do servidor (especialmente não é o seu servidor como o Yahoo API ou OpenWeather). Eu usei para buscar arquivos JSON com um XMLHttpRequest e funcionou bem.