我陷入了API网关的问题,我已经浏览了AWS论坛上的所有其他SO答案,并浏览了他们的文档,但仍然没有乐趣。
我正在尝试使用AWS API gateway设置一个API,该API调用一个Lambda函数,该函数读取/写入DynamoDB中的一个表。
DynamoDB的Lambda函数正在工作。我在AWS中创建了一个API,并为它创建了GET和OPTIONS方法。我了解到AWS并不强制只使用GET/POST选项,但是我在ajax调用中遇到了一个预检错误,因为没有OPTIONS方法,所以我添加了一个。
现在只是为了取得进展,我没有使用API密钥或授权。我可以使用 POSTMAN 成功调用我的 GET 方法,该方法将返回迪纳摩DB 表的内容。
但是当我尝试使用JQuery ajax调用时,我得到了
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我可以看到在网络选项卡下使用Chrome开发工具,OPTIONS方法返回状态200,GET返回状态200,但有上述错误。
我尝试过在 OPTIONS 和 GET 方法上启用 CORS,在每次更改后重新部署 API,尝试了以下操作(http://enable-cors.org/server_awsapigateway.html),但始终在控制台中收到相同的错误。
我正在从我桌面上的文件执行ajax调用,因此源为空,因为该页面将作为JS中的单个网页应用程序部署到S3。
当我在GET和OPTIONS上启用CORS时,我可以看到访问控制允许标头是“Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token”
和访问控制允许源*是*“
我的Ajax调用如下所示。我还尝试复制了邮递员使用的确切标题,它设置了授权标题(我现在已经在AWS中关闭了),但我总是得到上面相同的错误
var awsHeaders = {};
awsHeaders['X-Amz-Date'] = '20161127T171734';
$('#add, #cloud').click(function() {
$.ajax({
type: 'GET',
headers: awsHeaders,
dataType : "json",
url: '...',
success: function (res) {
console.log('response in GET:');
console.log(res);
},
error: function(data) {
console.log('in error');
console.log(data);
}
});
});
有人能告诉我我可能错过了什么吗?
非常感谢
更新 请参阅下面有关我如何根据DigitalKapteain评论解决此问题的答案 - 通过在我的Lambda函数的响应中设置“访问控制 - 允许 - 来源”:'*“标头。我在 AWS 文档中查找了此内容,但找不到它。此链接描述了 Lambda 和 Lambda 代理之间的区别,并说明了使用 CORS 时应执行的操作 https://serverless.com/framework/docs/providers/aws/events/apigateway/
如果这仍然不适合您,请确保使用JSON。如果您使用的是$.ajax,则stringify()您的json对象。如果不是,您仍然会返回一个声称是CORS相关错误的错误。但是,如果使用Postman发送相同的json对象,请求将成功。试试看。。。
Digitalkapitaen的回答是正确的;下面的代码可以省去一些人查找如何在Lambda中设置HTTP响应头的麻烦:
exports.handler = function(event, context, callback) {
callback(null, {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
}
});
};
对 Lambda 函数的 GET 请求的响应还必须包含访问控制允许源
标头。
我正在开发一个带有jhipster V4.5.6的Spring启动应用程序。但无法配置 CORS。 下面是我的application-dev.yml文件: WebConfigurer.java如下: 和安全配置。java文件如下所示: 现在,我可以使用 GET 请求。但是当我使用POST时,如下所示: 我得到以下错误: XMLHttpRequest 无法加载 http://localhost:80
问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您
我错过了一些东西。我正在努力让API调用工作。然后我像下面一样分割网址,它可以工作——字面上一次。在那之后,它无法再次工作。我发誓我没有改变什么。 在AXIOS中,您是如何操作的? 错误消息是: 无法加载XMLHttpRequesthttp://magicseaweed.com/api/W2Z26fXscpELi7nPB0svfqcGj9FtGO9e/forecast/?spot_id=228.
后端Cors过滤器
如何解决以下错误; 加载资源失败:服务器响应状态为500(内部服务器错误)cdn。安普项目。org/v0。js:68响应必须包含AMP访问控制允许源代码源标题Yd@cdn。安普项目。org/v0。js:68 cdn。安普项目。org/v0。js:68表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头 报道 遵循CORS上AMP G
相对来说,我对Ajax还比较陌生,只是负责这个跨域调用。我们的网页上有一个文本框,用户将使用它来执行公司名称的搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,web服务位于一个单独的域中,所以这自然会引起问题。 以下是我为完成这项工作所做的最大努力。我还应该注意,这个调用的目的是以XML格式返回结果,这些结果将在请求的< code>success部分进行解析。 这是再次出现错误消息: