AWS-API-Gateway Keine "Access-Control-Allow-Origin' - header vorhanden ist
Bin ich stecken auf ein Problem mit der API-gateway und ich habe mich durch all die anderen SO Antworten, AWS-Foren und wurden durch Ihre docs aber noch keine Freude.
Ich versuche zu setup eine API für die Nutzung von AWS-API-gateway fordert eine Lambda-Funktion, die liest/schreibt in eine Tabelle in DynamoDB.
Die Lambda-Funktion zu DynamoDB arbeiten. Erstellt habe ich eine API, AWS, und erstellt eine GET-und eine OPTIONEN-Methoden für Sie. Ich lese AWS erzwingt nicht die OPTIONEN nur für GET/POST, aber ich war immer einen preflight-Fehler in meinem ajax-Aufruf, wenn es keine OPTIONEN Methode also fügte ich ein.
Für jetzt nur um Fortschritte zu machen ich bin nicht mit einem API-key oder eine Genehmigung.
Kann ich erfolgreich meine GET-Methode verwenden BRIEFTRÄGER, der gibt den Inhalt der DynamoDB-Tabelle.
Aber wenn ich versuche, über einen JQuery-ajax-Aufruf bekomme ich
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Kann ich sehen, mit Chrome dev tools unter der Registerkarte "Netzwerk", die OPTIONEN, die Methode der Rückkehr status 200 und das zurückgegebene status 200, aber mit dem oben genannten Fehler.
Habe ich versucht die Aktivierung CORS sowohl auf der OPTIONEN-und GET-Methoden, haben erneut bereitgestellt wird, die API nach jeder änderung, die versucht haben, die folgenden (http://enable-cors.org/server_awsapigateway.html) aber bekomme immer den gleichen Fehler in der Konsole.
Ich bin der Ausführung des ajax-Aufrufs aus einer Datei auf meinem desktop, so Ursprung null ist, wie die Seite bereitgestellt werden, der S3 als eine einzige web-Seite, Anwendung in JS.
Wenn ich aktiviert CORS auf meine BEKOMMEN und OPTIONEN kann ich sehen, dass Access-Control-Allow-Header ist 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
- und Access-Control-Allow-Origin* ist '*'
Mein Ajax-Aufruf sieht wie folgt aus. Ich habe auch versucht, das kopieren der exakt Header BRIEFTRÄGER verwendet, die der Authorization-header gesetzt werden (die habe ich abgeschaltet AWS für jetzt), aber ich bekomme immer den gleichen Fehler über
var awsHeaders = {};
awsHeaders['X-Amz-Date'] = '20161127T171734';
$('#add, #cloud').click(function() {
$.ajax({
type: 'GET',
headers: awsHeaders,
dataType : "json",
url: '...',
success: function (res) {
console.log('response in GET:');
console.log(res);
},
error: function(data) {
console.log('in error');
console.log(data);
}
});
});
Kann jemand Licht auf, was ich möglicherweise fehlen?
Vielen Dank
Update
Siehe Antwort unten bezüglich, wie ich das Problem gelöst, wie pro DigitalKapteain Kommentare - durch setzen des 'Access-Control-Allow-Origin':'*' - header in die Antwort von meinem Lambda-Funktion. Ich sah dies in der AWS-docs konnte Sie aber nicht finden. Dieser link beschreibt den Unterschied zwischen Lambda und Lambda-Proxy und erklärt, was zu tun ist bei der Verwendung von CORS https://serverless.com/framework/docs/providers/aws/events/apigateway/
InformationsquelleAutor der Frage user12345 | 2016-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Antwort auf den GET-request auf die Lambda-Funktion muss außerdem enthalten die
Access-Control-Allow-Origin
header.InformationsquelleAutor der Antwort Digitalkapitaen
Digitalkapitaen die Antwort ist richtig; hier ist der code zum speichern jemand die Mühe, sucht sich wie man eine HTTP-Antwort-header in Lambda:
InformationsquelleAutor der Antwort Words Like Jared
Wenn dies noch nicht für Sie arbeiten, sicher sein, um JSON.stringify() Ihre json-Objekt, wenn Sie mit $.ajax. Wenn nicht, können Sie immer noch einen Fehler zurückgegeben, der behauptet, ein CORS-bezogene Fehler. Aber wenn Sie uns das gleiche json-Objekt mit Postboten, der Antrag erfolgreich sein wird. Probieren Sie es aus...
InformationsquelleAutor der Antwort rickfarina
Für jemanden der Suche zu integrieren, @Digitalkapitaen die Lösung in der Flasche, hier ist der code unten:
Tun, installieren Sie die Kolben-cors-Modul, indem Sie einen:
InformationsquelleAutor der Antwort captainblack