我正在调用一个使用lambda函数的API。我是从S3 (静态网络托管)中托管的HTML页面调用它的。在调用API时,我得到了CORS错误:
CORS策略阻止
访问“从源”到XMLHttpRequest :请求的资源上不存在“访问控制-允许-原产地”标题。
我在API上启用了CORS之后,在S3桶上指定了CORS,但是它不起作用。似乎,我错过了指定CORS头的正确位置。
附加信息:我在chrome developer工具中获得以下信息
**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.36Lambda函数代码:
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);
}发布于 2020-02-21 13:47:57
没有“访问-控制-允许-原产地”标题存在于请求的资源上。
这就是说,您请求的资源,您通过API的Lambda,在其响应中没有返回Access-Control-Allow-Origin头;浏览器期望响应中的CORS头来自API (可能是因为选项请求),但是响应没有它们。
您还没有这么具体地说过,但我假设您正在使用API网关上的Lambda代理集成。要解决您的问题,请在Lambda返回的响应中添加一个Access-Control-Allow-Origin: *头。您没有指定您的Lambda是用哪种语言编写的,也没有提供您的Lambda代码,但是如果它是用NodeJS编写的,那么返回内容的代码片段可能如下所示:
const result = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
// other required headers
},
body: object_you_are_returning
};
return result;https://stackoverflow.com/questions/60336435
复制相似问题