嗨,我正在尝试访问一个AWS API网关,它在CURL上运行正常,但在JS上却无法 为CROS政策而努力。 但是从AWS我已经启用了CROS
$.ajax({
url: ApiURL,
type: 'POST',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(hash),
async: true,
crossDomain: true,
crossOrigin: false,
headers: {
'accept': 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Methods': 'POST'
},
通过AJAX命中CURL方法
$.ajax({
url: stripTrailingSlash(BASE_URL) + '/contact/send',
type: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(body),
async: true,
headers: {
'X-CSRF-Token': csrfToken
},
我的api网关POST结构如下
我的lambda回复我确实是这样
const response = {
statusCode: statusCode,
headers:{ 'Access-Control-Allow-Origin' : '*' },
body: JSON.stringify({
message: responceMessage,
input: event,
}),
};
callback(null, response);
我进入浏览器时出错
答案 0 :(得分:1)
它可以在CURL中使用,因为CURL不会发送OPTIONS请求,但是浏览器会在您发出CORS请求时发送它。
对OPTIONS请求的响应是浏览器用来检查是否允许调用API的内容。
在API Gateway中启用CORS时,它将添加以下标头
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Methods': 'POST'
,但是如果启用代理请求集成,则API Gateway不再修改响应以添加标头。因此,除非您的lambda函数自行添加这些标头,否则它将无法正常工作。