2013-06-26 9 views
8

Ho due app separate sullo stesso server, con EmberJS che sta tentando di eseguire chiamate interdominio alla mia API di back-end.CORS: AJAX tra domini diversi senza JSONP consentendo l'origine sul server

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

EDIT

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

Perché non è sufficiente invertire il proxy del back-end in modo che il problema CORS non si verifichi mai? Modifica: Non credo che $ .ajax blocchi quelle richieste, dal momento che deve chiedere al server se sono consentite o meno ... – Coxer

+0

Il proxy inverso non consente tutte le richieste di origine incrociata? – darksky

+1

Hai provato ad anteporre "http: //" all'attributo url nella chiamata $ .ajax? – Ike

risposta

9

Non v'è alcuna necessità di utilizzare JSONP se si attiva CORS.

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

se questo header è impostato nella risposta, allora normale XmlHttpRequest sarà in grado di accedere al contenuto se è come stesso dominio. Controlla se questa intestazione è impostata correttamente.

spero che questo link vi aiuterà se si utilizza jQuery A CORS POST request works from plain javascript, but why not with 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, si otterrà la risposta.

soluzione

Aggiornamento:

Richiesta URL senza "http: //" ha causato il problema, anteponendo "http: //" risolto il problema

+0

Ho aggiunto 'Access-Control-Allow-Origin: *' nella risposta dell'header ma continuo a ricevere lo stesso errore. Sto usando jQuery 1.9 in modo che il problema con jQuery vs JS non dovrebbe essere un problema. Si prega di consultare la mia modifica per la richiesta jQuery AJAX che sto inviando. – darksky

+0

quale errore stai ottenendo? –

+0

Significa che: ** È necessario modificare la risposta al servizio web ??? ** –

0

È possibile utilizzare rack-cors in Rails 5, per impostare 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 
0

In ambiente cross-domain suggerisco di usare JSONP invece CORS becase molti host gratuiti non supporta CORS tra domini. È dettagliato in working examples - sia JSONP che CORS.

Problemi correlati