angular - "Aktivera CORS" i AWS API Gateway-resurs?
Jag har ett problem med AWS API Gateway. Jag utvecklar en webbapplikation med Angular 4 (använder TypeScript-språket), men om jag anropar PUT-metoden från frontend visas följande felmeddelande:
Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
och det är väldigt konstigt eftersom i AWS-konsolen fungerar PUT-metoden perfekt (jag gjorde många tester direkt från API Gateway-konsolen med en stage efter deployment, och allt fungerar bra). Om jag går till "Actions/Enable CORS" har alla metoder kryssrutan markerad, inklusive PUT-metoden, och jag kan inte exakt förklara vad problemet med API Gateway är.
Varför får jag det här felet om allt verkar okej i API-gatewayen? Finns det ett sätt att ändra dessa CORS?
Svar #1
Vad jag minns när jag blev slagen av samma problem för ett tag sedan...
När du använder en Lambda- eller HTTP-proxyintegration måste du minst specificera Access-Control-Allow-Origin-huvudet i svaret från din Lambda. Du kan behöva specificera ytterligare (har ingen kod till hands just nu). Jag minns att detta meddelande kan vara något vilseledande, och att testning från administrationskonsolen fungerar eftersom det egentligen inte använder CORS på grund av hur konsolen utför testerna.
Titta på den sista delen i: Aktivera CORS för en REST API-resurs
exports.handler = async (event) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Headers" : "Content-Type",
"Access-Control-Allow-Origin": "https://www.example.com",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
},
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
Du behöver ersätta Access-Control-Allow-Origin med värdnamnet som används av din klientapp. Som ett snabbt test, använd *, men gå inte till produktion med det eftersom det motverkar syftet med CORS.
Svar #2
Försök att lägga till din auktorisers Tokenkälla till AllowHeaders.
Klicka på Aktivera CORS, lägg sedan till Token Source i slutet av Access-Control-Allow-Headers
AllowHeaders: "'Content-Type, Authorization, X-Amz-Date, X-Api-Key, X-Amz-Security-Token, {your Token Source}'"
