【发布时间】:2020-06-05 18:03:46
【问题描述】:
我正在调用一个使用 lambda 函数的 AWS API。我从托管在 S3(静态 Web 托管)中的 HTML 页面调用它。调用 API 时出现 CORS 错误:
在 '' 从源访问 XMLHttpRequest '' 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。
我在 API 上启用了 CORS,在 S3 存储桶上指定 CORS 后尝试过,但它不起作用。 看来,我错过了指定 CORS 标头的正确位置。
附加信息: 我在 chrome 开发者工具中得到以下信息
**Response Headers**
content-length: 42
content-type: application/json
date: Mon, 24 Feb 2020 04:28:51 GMT
status: 403
x-amz-apigw-id: IYmYgFQvoAMFy6Q=
x-amzn-errortype: MissingAuthenticationTokenException
x-amzn-requestid: 79b18379-383d-4ddb-a061-77f55b5727c3
**Request Headers**
authority: apiid-api.us-east-1.amazonaws.com
method: POST
path: /Prod
scheme: https
accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,hi;q=0.8
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
access-control-allow-methods: GET, OPTIONS
access-control-allow-origin: https://apiid.execute-api.us-east-1.amazonaws.com/Prod
content-length: 117
content-type: application/json; charset=UTF-8
origin: http://example.com
referer: http://example.com/
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Lambda 函数代码:
var AWS = require('aws-sdk');
var ses = new AWS.SES();
var RECEIVER = 'example@gmail.com';
var SENDER = 'example@gmail.com';
var response = {
"isBase64Encoded": false,
"headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'},
"statusCode": 200,
"body": "{\"result\": \"Success.\"}"
};
exports.handler = function (event, context) {
console.log('Received event:', event);
sendEmail(event, function (err, data) {
context.done(err, null);
});
};
function sendEmail (event, done) {
var params = {
Destination: {
ToAddresses: [
RECEIVER
]
},
Message: {
Body: {
Text: {
Data: 'name: ' + event.name + '\nphone: ' + event.phone + '\nemail: ' + event.email + '\ndesc: ' + event.desc,
Charset: 'UTF-8'
}
},
Subject: {
Data: 'Website Referral Form: ' + event.name,
Charset: 'UTF-8'
}
},
Source: SENDER
};
ses.sendEmail(params, done);
}
【问题讨论】:
-
我试过了。想知道我哪里出错了。
-
将 CORS 标头添加到来自 Lambda 的响应中。