Ein Antrag als Quer Herkunft HTTP-Anforderung identifiziert wird, wenn es eine Ressource aus einer anderen Domäne als der anfordert, die die erste Ressource dient. Aus Sicherheitsgründen sind URL-übergreifende HTTP-Anfragen, die von Skripten aus initiiert werden, in Browsern eingeschränkt.
Die Cross-Origin Resource Sharing (CORS) -Mechanismus von der W3C definiert einen Standard-Server, die Zugriffskontrollen domänenübergreifende Netz geben, die eine sichere domänenübergreifende Datenübertragungen ermöglichen. Es funktioniert, indem neue HTTP-Header hinzugefügt werden, die es den Servern ermöglichen, die Menge der Ursprünge zu definieren, die über einen Webbrowser auf diese Informationen zugreifen dürfen.
Zusätzlich werden einige HTTP-Anforderungen standardmäßig nicht sicher angesehen, wenn sie Benutzerdaten ändern können. Diese Anfragen sind automatisch Preflight in Webbrowsern. Das heißt, bevor eine Anfrage gesendet wird, eine Preflight Anfrage mit dem OPTIONS
Verb wird vom Browser auf den anderen Domänenserver um, ob die tatsächliche Anforderung sicher zu bestimmen, gesendet werden soll oder nicht senden. Nach Genehmigung durch den Server wird die tatsächliche Anfrage gesendet.
Wenn Sie Postman verwenden, Ihre tatsächliche Anforderung wird gesendet und das ist es. Kein CORS-Schutz oder irgendetwas, Postman ist kein Webbrowser. Es funktioniert einfach.
Wenn Sie jQuery verwenden, um einen AJAX-Aufruf in einem Skript von Ihrem Webbrowser auszuführen, entspricht dies dem CORS-Standard und die Markierung Ihrer Anforderung ist unsicher. Das bedeutet, dass es Preflight sein sollte. Es sendet dann eine erste Anfrage an Ihren Server mit der OPTIONS
Methode, um zu überprüfen, ob Ihre tatsächliche Anfrage sicher ist. Diese Anfragen müssen auf Ihrem Webserver erlaubt sein (was Nginx zu sein scheint).
Sie können this example auf überprüfen, wie CORS auf Nginx zu ermöglichen, und vielleicht ist es mit Ihrer aktuellen Konfiguration vergleichen.Eine grundlegende aufgerissenen Konfiguration wäre (ich einige Kommentare hinzugefügt):
location/{
// OPTIONS requests.
if ($request_method = 'OPTIONS') {
// URI that may access the resource.
add_header 'Access-Control-Allow-Origin' '*';
// Methods allowed when accessing the resource.
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
// Headers that can be used when making the actual request.
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
// Cache the preflight result for 20 day.
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
// POST requests.
if ($request_method = 'POST') {
// URI that may access the resource.
add_header 'Access-Control-Allow-Origin' '*';
// Methods allowed when accessing the resource.
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
// Headers that can be used when making the actual request.
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
// GET requests
if ($request_method = 'GET') {
// URI that may access the resource.
add_header 'Access-Control-Allow-Origin' '*';
// Methods allowed when accessing the resource.
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
// Methods allowed when accessing the resource.
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
Wenn alles auf der Server-Seite in Ordnung ist, sollten Sie Ihren jQuery Wunsch anpassen zu entsprechen, was auf dem Server erwartet wird.
jQuery.ajax({
url: 'https://host/rest/V1/integration/admin/token',
data: JSON.stringify({"username": "ember-app", "password": "ember-app2"}),
contentType: "application/json",
method: 'POST'
}).done((response) => {
alert(response);
})
Außerdem '$ .post ('myip/index.php/rest/V1/Integration/admin/Token? Username = glut-app & password = glut-app2', function (Antwort) { console.log (Antwort); }); 'gibt mir eine 200, aber alle oben genannten Methoden lösen auch einen GET auf der URL aus, die einen CORS-Fehler zurückgibt – rickyduck
Können Sie Ihre CORS-Konfiguration für Nginx auch bitte teilen? – HiDeo