0

Okay, ich bin all diese Interwebs gewesen, die nach einem Einblick in mein Problem suchen; Ich habe wahrscheinlich über 80 Stack-Überlauf-Threads RE-API-Gateway und so weiter, aber keiner von ihnen scheint zu helfen oder sprechen nahe genug zu meinem Problem.API-Gateway CORS HTTP 415

Ich bin neu auf API-Gateway und cors, aber mal sehen, ob ich das Problem artikulieren, die ich zu sehen bin:

einen API-Gateway-Proxy Kinesis Firehose Hydratisieren eine Rotverschiebung Datenbank einrichten. Der Proxy, Feuerwehrschlauch, und Rotverschiebung Gateway sind und arbeiten, wenn in Isolation genannt, aber, wenn sie von einem unserer Kunden vor Ort genannt wird, erhalten wir einen Fehler wie folgt:

XMLHttpRequest cannot load [api_call_here]. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin [origin_website_here] is therefore not allowed access. The response had HTTP status code 403. 

Okay, so dass impliziert stark, dass CORS ist benötigt, oder? in der Konsole auf der Ressource, ermöglicht CORS, Bereitstellen neue Fehler:

XMLHttpRequest cannot load [api_call_here]. Request header field $cookies is not allowed by Access-Control-Allow-Headers in preflight response. 

Ooooooooookay, aus dem neuen Verfahren Optionen durch die Funktion aktivieren CORS hinzugefügt, in Integrationsantwort erlaubt Headern unter Zugriffssteuerung erlaubt Header hinzufügen ' $ Cookies ', bereitstellen.

Jetzt bekomme ich einen neuen Fehler, sehr ähnlich dem ersten Fehler:

XMLHttpRequest cannot load [api_call_here]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin [origin_website_here] is therefore not allowed access. The response had HTTP status code 415. 

Hinweis der erste Fehler HTTP-Statuscode 403 hatte, und dieser dritte hat 415. Statuscode Dies ist, wo ich bin Probleme haben. Wenn ich in die GET-Methode als Proxy-Methode, Body-Mapping-Vorlagen, gehen, habe ich "Wenn keine Vorlagen definiert (empfohlen)" ausgewählt.

Nun, ich lese, dass, wenn API-Gateway fehlschlägt, eine übereinstimmende Vorlage zu finden, es mit einem 415 Fehler ablehnt, so änderte ich oben genannte Option zu "Wenn keine Vorlage die Anfrage Inhaltstyp Header entspricht". Dadurch verschwand der Fehler, aber die Daten werden weiterhin nicht gespeichert, wenn sie vom Ursprung aus aufgerufen werden. Wenn ich die api direkt vom Postboten, von der Schlaflosigkeit oder einfach von einer einfachen alten Adressleiste aus anrufe, werden die Datensätze schön hinzugefügt.

Öffnen von Chrome und Blick auf den Header sehe ich, dass der Cookie als Text/HTML kommt.

In Bezug auf die Template-Mapping dort habe ich nur eine Karte für die Anwendung/JSON definiert; Könnte das ein Teil des Problems sein?

Da auch die Response-Header aus Chrom Konsole betrachtet ist wie folgt:

content-length:37 
content-type:application/json 
date:Wed, 19 Apr 2017 23:43:35 GMT 
status:415 
via:1.1 [blahblabbleblah].cloudfront.net (CloudFront) 
x-amz-cf-id:[blahblabbleblah] 
x-amzn-requestid:[blahblabbleblah] 
x-cache:Error from cloudfront 

Ich bin relativ neu in diesem so sehe ich nicht, wie Cloudfront Dazu passt, vor allem geben, dass es über beschwert media type, während sich die Konsole über den Header access-control-allow-origin beschwert.

Auf jeden Fall würde jede Hilfe, wie man den dritten Fehler beheben kann, am meisten geschätzt.

+2

Cloudfront übernimmt einige Front-End-Logistik für API Gateway. API-GW erstellt und konfiguriert eine versteckte CloudFront-Verteilung für jede API, die Sie erstellen, und Anforderungen werden über CloudFront an API-GW weitergeleitet. In diesem Fall bedeutet "X-Cache: Fehler von Cloudfront" nichts anderes als die Tatsache, dass CloudFront eine Antwort mit einem HTTP-Statuscode> = 400 zurückgibt. Es ist kein Fehler "in" oder "at" oder "ausgelöst durch" oder "generiert von" CloudFront. Der CloudFront-Aspekt kann ignoriert werden - API-GW oder der Proxy-Dienst, der dahinter steht, wirft den Fehler, weil er den "Content-Type" nicht mag. –

Antwort

0

Was ist der Inhaltstyp in Ihren Anforderungen vom Browser? Wenn der Content-Type-Header nicht in der Anfrage angegeben ist, nimmt API Gateway standardmäßig "application/json" an.

Opening up chrome and looking at the header i see that the cookie is coming across as text/html.

Ich bin nicht sicher, ob Sie gemeint, dass "Content-Type" Wert in der Anforderung Header wird auf "text/html". Wenn ja, ist das das Problem. Sie benötigen entweder eine übereinstimmende Vorlage, oder Sie müssen standardmäßig durchgehen, indem Sie "Wenn keine Vorlage der Kopfzeile des Inhaltsantrags entspricht" wählen.

Verwandte Themen