2016-04-08 8 views
0

Ich habe erstellt verwenden und eine AWS-API-Gateway-Ressource mit der folgenden Struktur mit einem benutzerdefinierten HTTP-Request-Header 'X-Header'Kann benutzerdefinierte Anforderungsheader auf AWS API-Gateway mit CORS

dev (stage) 
    /echo (resource) 
    POST (method) 
     Method Request - Headers: X-header 
    OPTIONS (method) 
     Method Request - Headers: X-header 

eingesetzt Als ich POST an den Endpunkt von Chrome, erhalte ich den folgenden Fehler.

XMLHttpRequest kann nicht geladen werden https://fxxxx.execute-api.us-west-2.amazonaws.com/dev/echo. Anforderungsheaderfeld X-header ist in der Preflight-Antwort von Access-Control-Erlaube-Header nicht erlaubt.

Chrome führt eine Preflight-Prüfung mit der OPTIONS-Methode durch. Ich kann den Anfrageheaders siehe:

Access-Control-Request-Header: akzeptieren, Content-Typ, X-Header
Access-Control-Request-Methode: POST

aber die Antwort nur Überschrift hat:

Access-Control-Allow-Header: Content-Type, X-Amz-Date, Authorization, X-Api-Key, X-Amz-Sicherheit-Token
Access-Control-Allow -Methoden: POST, OPTIONEN
Access-Control-Allow-Origin: *

Chrome erwartet, dass die Response-Access-Control-Request-Header meiner benutzerdefinierten X-Header enthalten, die logisch erscheint. Ist das ein API Gateway Bug?

Die einzige Problemumgehung, die ich sehe, ist, den benutzerdefinierten Header zu entfernen und die Daten im POST-Textkörper zu übergeben.

Antwort

4

Sie haben die volle Kontrolle über die CORS-Header auf der Antwort OPTIONS in API Gateway. Wenn Sie dem Header Access-Control-Allow-Headers den Header x-header hinzufügen müssen, fügen Sie ihn hinzu! Wechseln Sie zu der Integrationsantwort für die Methode OPTIONS, und ändern Sie den statischen Wert dieses Headers.

Wenn Sie zum ersten Mal CORS mit der Konsolenfunktion konfigurieren (was Sie möglicherweise noch nicht getan haben), können Sie die Liste der Header dort eingeben und weitere erweiterte Header sehen.

Sie können diese Änderung in der Zukunft bei create-time vornehmen oder sie aktualisieren, wenn die OPTIONS erstellt wurde.

+0

Dank Jack. Ist das das beabsichtigte Verhalten? Ich hätte gedacht, wenn ich CORS und einen benutzerdefinierten Header aktiviert hätte, würde API GW den Rest erledigen. – Jason

+0

Auch: super, dass ihr auf stackoverflow unterstützt! – Jason

+1

Ja, das ist das beabsichtigte Verhalten.Ich nehme an, es könnte automatisierter sein, aber wir versuchen, uns von dieser Art von "magischen" Veränderungen im Allgemeinen fernzuhalten. Ich werde mit dem Team diskutieren, wir könnten eine Ausnahme machen, da es für mich Sinn macht. –

0

Ich habe genau das gleiche Problem. Und ich habe meinen benutzerdefinierten Header zu einer durch Kommas getrennten Liste für Access-Control-Allow-Header unter der Ressource, CORS aktivieren hinzugefügt; und auch unter Ressource - OPTIONEN - Integrationsantwort, Headerzuordnungen.

Ich bekomme den gleichen Fehler in Chrome, und überprüfen Sie den Aufruf OPTIONS im Netzwerk, sehe ich nicht meinen Header-Namen in Access-Control-Erlaube-Header in der Antwort.

  • John
Verwandte Themen