AWS API Gateway通过CURL工作,但不通过javascript工作

时间:2019-01-23 05:05:39

标签: amazon-web-services aws-lambda cross-domain aws-api-gateway

嗨,我正在尝试访问一个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);

我进入浏览器时出错

1 个答案:

答案 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函数自行添加这些标头,否则它将无法正常工作。