Ich habe derzeit eine POST-Funktion über API-Gateway und Lambda, die von einem Angular-Client mit CORS zugegriffen wird. Während ich nicht weiß, was Ihre Konfiguration ist, kann ich alle meine relevanten Einstellungen in der Hoffnung teilen, dass Sie vielleicht etwas finden, was Sie verpasst haben. Die Aktivierung von CORS ist im Moment sehr schmerzhaft (und hoffentlich wird Amazon daran arbeiten, das Problem zu beheben), was in vielen Bereichen mit ziemlich schlechter Dokumentation viele kleine Schritte erfordert.
Ich habe 2 Methoden (OPTIONS und POST) für meine Ressource, und ich werde die entsprechenden Einstellungen für jede Aktie:
POST:
Methode anfordern: Nichts Besonderes. Im Fall meines Endpunkts habe ich eine Option unter Anforderungswege für einen meiner Routenparameter. Ich verwende keine Abfragezeichenfolge, daher ist die URL-Abfragezeichenfolge leer. HTTP Request Headers ist ebenfalls leer.
Integration Anfrage:
Integration Typ: Lambda Mapping-Vorlagen: Ich habe eine (application/json) mit einer Vorlage die entsprechenden Werte aus der Anfrage Körper und Routenparameter meiner Lambda-Funktion zu übergeben.
Antwort der Methode:
Erweitern Sie das Feld mit 200 Statuscodes. Fügen Sie eine Kopfzeile für "Access-Control-Allow-Origin" hinzu und klicken Sie auf das Häkchen, um es zu speichern. Möglicherweise müssen Sie dies für andere Statuscodes tun, die Sie möglicherweise haben.
Integrationsantwort:
Erweitern Sie das 200-Antwortstatusfeld. Ändern Sie unter Mapping-Zuordnungen den Zuordnungswert, um '*' zu enthalten. Die einfachen Anführungszeichen sind erforderlich. Möglicherweise müssen Sie dies für andere Integrationsantworten tun, die Sie möglicherweise haben.
OPTIONEN:
Methode anfordern:
Nichts Besonderes, genau wie die Methode POST.
Integrationsanfrage:
Ich habe es gesetzt, um Integration zu verspotten. Laut Amazon spielt es keine Rolle, also setze ich es nur so, dass alles, was wir wirklich tun müssen, 200 mit den entsprechenden Headern antwortet. Keine Zuordnungsvorlagen
Antwort der Methode:
Erweitern Sie das Feld mit 200 Statuscodes. Fügen Sie die folgenden drei Antwortheader hinzu und speichern Sie sie mit dem Kontrollkästchen: Access-Control-Allow-Header, Access-Control-Allow-Methoden, Access-Control-Allow-Origin. Es sind keine anderen Statuscodes vorhanden.
Integrationsantwort:
Erweitern Sie das 200-Antwortstatusfeld.Die Regex ist leer (auf Standard gesetzt) und diese Methode hat nur eine Antwort von 200. Erweitern Sie die Headerzuordnungen und setzen Sie die Header auf die folgenden Zuordnungswerte:
Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Requested-With'
Access-Control-Allow-Methods: 'GET,POST,OPTIONS'
Access-Control-Allow-Origin: '*'
Es gibt keine Zuordnungsvorlagen.
Dann stellen Sie Ihre API bereit. Hoffentlich erlaubt es jetzt CORS-Anfragen. Ich habe genau das gleiche Problem wie bei Ihnen festgestellt, und ich bin mir ziemlich sicher, dass der X-Requested-With-Wert in Access-Control-Allow-Headers fehlte.
Was ist Ihr Endpunkt URL? Wenn es sich nicht um localhost handelt, können Sie aufgrund von CORS-Beschränkungen (https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) keine Anforderungen stellen. Sie müssen entweder Ihre Anfragen per Proxy übertragen oder eine Anfrage von derselben URL wie Ihr Ziel anfordern. –
Welcher Wert ist Access-Control-Allow-Origin im API-Gateway (sowohl der Beitrag als auch die Optionen) – Luc
'*', genau wie in dem Dokument, das ich verlinkt habe. Dasselbe gilt sowohl für OPTIONS- als auch für POST-Methoden – dudemonkey