CORS: AJAX tra domini diversi senza JSONP consentendo l’accesso al server di origine

Ho due app separate sullo stesso server, con EmberJS che prova a fare chiamate interdominio alla mia API di back-end.

Ho configurato la mia API di back-end per consentire richieste tra domini da quella specifica origine. Esiste comunque un modo per evitare l’uso di JSONP con una configurazione simile? $.ajax sta bloccando le richieste tra domini prima che siano mai state inviate. In caso contrario, qual è il punto di CORS, quale lato server ho implementato per accettare richieste dalla mia sorgente di front-end JS?

MODIFICARE

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

Non è necessario utilizzare JSONP se si abilita CORS.

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

se questa intestazione è impostata nella risposta, allora normale XmlHttpRequest sarà in grado di accedere alla risposta come se fosse come lo stesso dominio. Controlla se questa intestazione è impostata correttamente.

Spero che questo collegamento ti aiuti se stai usando jquery Una richiesta CORS POST funziona con un semplice javascript, ma perché non con jQuery?

Aggiornamento: esempio

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

Prova questo in qualsiasi dominio, riceverai risposta.

Soluzione di aggiornamento:

L’URL di richiesta senza “http: //” ha causato il problema, in attesa di “http: //” risolto il problema

Puoi usare rack-cors in Rails 5 , per impostarlo per consentire tutti gli URL.

 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 

Nell’ambiente cross-domain suggerisco di usare JSONP invece di CORS perché molti host liberi non supportano CORS interdominio. È dettagliato in esempi di lavoro – sia JSONP che CORS.