CORS – AJAX entre domínios sem o JSONP, permitindo a origem no servidor

Eu tenho dois aplicativos separados no mesmo servidor, com o EmberJS tentando fazer chamadas entre domínios para minha API de back-end.

Configurei minha API de back-end para permitir solicitações entre domínios a partir dessa origem específica. Existe uma maneira no entanto, para evitar o uso de JSONP com tal configuração? $.ajax está bloqueando as solicitações entre domínios antes que elas sejam enviadas. Se não, qual é o sentido do CORS, qual lado do servidor eu tinha implementado para aceitar solicitações da minha fonte front-end de JS?

EDITAR

Pedido AJAX:

 $.ajax({ url: "api.lvh.me:3000/accounts/login", data: cred, type: "POST", xhrFields: { withCredentials: true }, success: function(response){ alert('succeeded!'); console.log(response); alert(response); }, failure: function(message){ alert("failed"); console.log(message); alert(message); } }); 

Não há necessidade de usar o JSONP se você ativar o CORS.

 Access-Control-Allow-Origin: http://www.example.com 

se esse header for definido na resposta, o XmlHttpRequest normal poderá acessar a resposta como se fosse o mesmo domínio. Verifique se esse header está configurado corretamente.

Espero que este link irá ajudá-lo se você estiver usando jquery A solicitação CORS POST funciona a partir de javascript simples, mas por que não com jQuery?

Atualização: exemplo

 var xmlhttp= new XMLHttpRequest(); var url="https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control"; xmlhttp.open("GET",url,false); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); xmlhttp.send(); 

Tente isso em qualquer domínio, você receberá resposta.

Atualizar solução:

Solicitar url sem “http: //” causou o problema, prefixando “http: //” resolveu o problema

Você pode usar o rack-cors no Rails 5 para configurá-lo para permitir todas as URLs.

 Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins '*' resource '*', headers: :any, methods: [ :get, :post, :put, :patch, :delete, :options, :head ] end end 

No ambiente de domínio cruzado, sugiro usar o JSONP em vez do CORS, porque muitos hosts gratuitos não suportam o CORS entre domínios. Ele é detalhado em exemplos de trabalho – tanto JSONP quanto CORS.