Ich dachte, ich habe CORS verstanden, aber es gibt etwas, das ich nicht verstehe, anscheinend. Ich habe eine App, die ich von localhost ausführen möchte. Diese App muss eine Anfrage an Azure Search senden. Ich versuche ein Suchdokument hochzuladen. In einem Versuch, dies zu tun, habe ich folgendes:jQuery Ajax - POST von Localhost generiert keine 'Access-Control-Allow-Origin'-Header
var url = 'https://my-app.search.windows.net/indexes/test/docs/index?api-version=2015-02-28';
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
headers: {
'api-key':'XXXXXX',
'Content-Type':'application/json'
},
beforeSend: function (req) {
req.setRequestHeader('Access-Control-Allow-Origin', '*');
},
data: JSON.stringify({
'@search.action':'upload',
'id': '1',
'name': 'some name'
}),
success: function() { alert('success'); },
error: function() { alert('check the console window.'); }
});
Zugegeben, die url
und api-key
sind nicht die realen. Trotzdem kann ich diese Daten POSTman POSTman erfolgreich POST. Doch wenn ich versuche, es von meiner app über jQuery POST, erhalte ich einen Fehler im Konsolenfenster, das sagt:
Failed to load resource: the server responded with a status of 403 (Forbidden)
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:72' is therefore not allowed access. The response had HTTP status code 403.
Ich habe die „erlaubt Herkunftsart“ CORS-Optionen für meinen Azure-Suchdienst auf " Alle". Also im Grunde ist es weit offen. Trotzdem erhalte ich immer noch diesen CORS-Fehler.
Wie poste ich Daten zu diesem Dienst von jQuery auf localhost?
Scheint mir die 403 (Verbotene) Antwort ist der wahre Schlüssel hier. Sie werden möglicherweise auf eine Fehlerseite weitergeleitet, die CORS nicht unterstützt. Bist du sicher, dass deine "API-Taste" korrekt ist? Überprüfen Sie die * Network * -Konsole Ihres Browsers auf die gesendeten Anforderungsheader. – Phil
Es ist nicht sinnvoll, den Header 'Access-Control-Allow-Origin' auf einem Client zu setzen. Alle 'Access-Control-Allow-XXX'-Header sind die alleinige Verantwortung eines Servers. –
@Phil - Ich bin mir sicher, dass der 'API-Schlüssel' korrekt ist. Tatsächlich benutze ich es, um andere Endpunkte auf dem gleichen Dienst zu treffen. Der Schlüssel, den ich benutze, ist ein primärer Admin-Schlüssel, also sollte er alle Privilegien haben. – user687554