AWS S3静态站点CORS jquery ajax POST到API网关

时间:2017-10-10 18:40:57

标签: jquery cors aws-lambda aws-api-gateway

我们在s3上有一个静态网站。
从页面我们做一个jquery ajax帖子到AWS api gateway / lambda函数 我不确定OPTIONS是如何工作的,但是当我们启用'chrome allow cross origin plugin'时,一切正常(我们得到了JSON响应),
当插件被禁用时,我们收到错误“请求标题字段Access-Control-Allow-Origin在预检响应中不允许Access-Control-Allow-Origin”
是否可以在没有插件的情况下执行POST并获得成功的响应 我们还在API网关上启用了CORS。

这是AJAX POST

$.ajax({
type: 'POST',
url: API_URL,
data: JSON.stringify(inputdata),
dataType: 'json',
 beforeSend: function(xhr) {
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Access-Control-Allow-Methods", "OPTIONS,POST");
xhr.setRequestHeader("Access-Control-Allow-Headers", "X-Requested-With,Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token");
xhr.setRequestHeader("Content-Type", "application/json");
 //xhr.setRequestHeader("origin", "http://evil.com/");
},
/*
headers: {

        'Access-Control-Allow-Headers':'Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
        'Access-Control-Allow-Origin' : '*',
        'Access-Control-Allow-Methods' : 'OPTIONS,POST',
        'Access-Control-Allow-Credentials' : true,
        'Content-Type': 'application/json; charset=utf-8'
},*/
crossDomain: true,
success: function (data) {getdatasuccess(data)},
error: function(data){
console.log("error = "+JSON.stringify(data));
}
});

启用'allow cross origin plugin'插件时的响应标头

:授权:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:OPTIONS
:路径:/ PROD
:方案:HTTPS
接受: /
accept-encoding:gzip,deflate,br
接受语言:EN-US,EN; Q = 0.8
访问控制请求报头:访问控制 - 允许报头,访问控制 - 允许的方法,访问控制允许来源,内容类型
访问控制请求-方法:POST
起源:http://evil.com/
user-agent:Mozilla / 5.0(Windows NT 6.3; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 61.0.3163.100 Safari / 537.36

禁用'允许交叉原始插件'插件时的响应标头

:授权:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:OPTIONS
:路径:/ PROD
:方案:HTTPS
接受: /
accept-encoding:gzip,deflate,br
接受语言:EN-US,EN; Q = 0.8
访问控制请求报头:访问控制 - 允许报头,访问控制 - 允许的方法,访问控制允许来源,内容类型
访问控制请求-方法:POST
起源:https://s3.amazonaws.com
引用者:https://s3.amazonaws.com/mysitetest/htmlpage2.html
user-agent:Mozilla / 5.0(Windows NT 6.3; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 61.0.3163.100 Safari / 537.36

1 个答案:

答案 0 :(得分:1)

它对我有用:

API网关>方法选项> “整合响应”>标题映射:

访问控制允许标头:'内容类型,X-Amz-Date,授权,X-Api-Key,X-Amz-Security-Token,X- XSRF-TOKEN,接入控制允许接头,访问控制允许来源'

访问控制 - 允许 - 方法:' POST,GET,OPTIONS'

访问控制 - 允许 - 来源:' *'

从客户端删除不必要的标题!