Может показаться, что об этом спрашивали миллион раз, но я попытался добавить и мой фронтенд (React), и бэкэнд (Lambda с Node.js):
Access-Control-Allow-Headers
Access-Control-Request-Headers
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE,PATCH,OPTIONS'
Но я все еще получаю эту ошибку:
Access to XMLHttpRequest at 'https://<API-INVOKE-URL>/prod/notes' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.
Вот мой лямбда-код для обработки ответа:
function buildOutput(statusCode, data) {
let _response = {
statusCode: statusCode,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify(data)
};
return _response;
};
Вот мой код React для отправки запроса POST:
createNote(note) {
return API.post("notes", "/notes", {
headers: {
"Authorization": this.state.token,
"Access-Control-Allow-Origin": "*"
},
body: {
userid: this.state.username,
noteid: 'new',
content: 'from frontend'
}
});
- Я протестировал свою лямбда-функцию с консоли, и она работает (умеет делать CRUD для DynamoDB).
- Я включил CORS для своих ресурсов шлюза API и развернул API.
- Я пытался использовать PostMan с:
Headers:Content/Type: application/json
Authorization: <MY_TOKEN>
*With and without* Access-Control-Allow-Origin: *
и это работает: запрос успешно отправляется из PostMan в API Gateway, и в моем DynamoDB появляется новый элемент.