2017-10-10 97 views
0

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

这里是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)); 
} 
}); 

响应头时, '允许跨起源插件' 插件启用

:权威:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:OPTIONS
:路径:/ PROD
:方案:HTTPS
接受:/
accept-encoding:gzip,deflate,br
accept-language:zh-CN,en; q = 0.8
access-control-request-headers:access-control-allow-headers,access-control-allow-methods ,访问控制允许来源,内容类型
访问控制请求-方法:POST
起源:http://evil.com/
用户代理:Mozilla的/ 5.0(Windows NT的6.3; Win64平台; 64)为AppleWebKit/537.36(KHTML,例如Gecko)铬/ 61.0.3163.100 Safari浏览器/ 537.36

响应头时“允许跨原点plugin'plugin被禁用

:授权:64j2k6w2dc.execute-api.us- east-1.amazonaws.com
:方法:OPTIONS
:路径:/ PROD
:方案:HTTPS
接受:/
接受编码:gzip,放气,BR
接受语言: en-US,en; q = 0.8
访问控制请求标题:访问控制允许标题,访问控制允许方法,访问控制允许来源,内容类型
访问控制请求方法:POST
原始地址:https://s3.amazonaws.com
referer: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

+0

您试图在您的ajax请求中设置这些标头会引发更多问题。 –

+0

把他们全部拿出来,但没有帮助。 – user2324723

回答

1

它为我的作品:

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

访问控制允许报头:“内容类型,X-AMZ-日期,授权,X-Api-Key,X-Amz-Security-Token,X-XSRF-TOKEN,访问控制允许源头,访问控制允许源头'

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

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

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

+0

我现在已启用 API网关>方法选项>集成响应>标题映射 上的确切设置。不幸的是,我无法在此处粘贴屏幕快照。 这是我的S3页面的链接 https://s3.amazonaws.com/anothercoderiot/htmlpage2.html 输入设备ID 64-5A-04-A6-06-6F 如果您启用了CORS“Allow -Control-Allow-Origin“插件可以工作。 在此先感谢 – user2324723