it-swarm.com.de

CORS - Domänenübergreifend AJAX Ohne JSONP durch Zulassen von Origin auf dem Server

Ich habe zwei separate Apps auf demselben Server, wobei die EmberJS-App versucht, domänenübergreifende Aufrufe an meine Back-End-API durchzuführen.

Ich habe meine Backend-API so eingerichtet, dass domänenübergreifende Anforderungen von diesem bestimmten Ursprung zugelassen werden. Gibt es jedoch eine Möglichkeit, die Verwendung von JSONP mit einer solchen Einrichtung zu vermeiden? $.ajax blockiert domänenübergreifende Anfragen, bevor diese gesendet werden. Wenn nicht, wozu dient CORS? Welche Serverseite hatte ich implementiert, um Anforderungen von meiner JS-Front-End-Quelle entgegenzunehmen?

EDIT

AJAX-Anfrage:

$.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);
    }
});
8
darksky

Es ist nicht erforderlich, JSONP zu verwenden, wenn Sie CORS aktivieren.

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

wenn dieser Header in der Antwort festgelegt ist, kann normales XmlHttpRequest auf die Antwort zugreifen, als wäre sie dieselbe Domäne. Prüfen Sie, ob dieser Header korrekt gesetzt ist.

Ich hoffe, dass dieser Link Ihnen hilft, wenn Sie jquery A CORS POST request verwenden, funktioniert mit einfachem Javascript, aber warum nicht mit jQuery?

Update: Beispiel

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

Versuchen Sie dies in einer beliebigen Domäne, Sie erhalten eine Antwort.

Lösung aktualisieren:

Anforderungs-URL ohne "http: //" verursachte das Problem, bevor "http: //" das Problem löste

9
Balaji Sivanath

Sie können rack-cors in Rails 5 verwenden, um alle URLs zuzulassen.

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
Xinyang Li

In einer domänenübergreifenden Umgebung empfehle ich die Verwendung von JSONP anstelle von CORS, da viele freie Hosts kein domänenübergreifendes CORS unterstützen. Es wird ausführlich in Arbeitsbeispielen - JSONP und CORS beschrieben.

0
Leon Rom