AWS API 网关通过 CURL 工作但不通过 javascript 工作

AWS API Gateway working through CURL but not working through javascript

您好,我正在尝试访问 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'
        },

CURL 方法命中AJAX

$.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);

我的浏览器出错

它适用于 CURL,因为 CURL 不发送 OPTIONS 请求,但浏览器会在您发出 CORS 请求时发送它。

对 OPTIONS 请求的响应是浏览器用来检查您是否被允许调用 API 的内容。

当您在 API 网关中启用 CORS 时,它会添加以下 headers

'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Methods': 'POST'

但如果启用代理请求集成,API 网关将不再修改响应以添加 header。因此,除非您的 lambda 函数自行添加这些 header。

,否则它不会起作用。