从托管在 S3 存储桶上的站点访问 AWS API 时出现 CORS 问题 [关闭]
Posted
技术标签:
【中文标题】从托管在 S3 存储桶上的站点访问 AWS API 时出现 CORS 问题 [关闭]【英文标题】:CORS issue while accessing AWS API from site hosted on S3 bucket [closed] 【发布时间】:2021-03-13 02:21:09 【问题描述】:我正在尝试从托管在 S3 存储桶上的表单填充我的 dynamodb。我正在使用 lambda 函数和 API 网关。当我在那里测试它时它工作正常,但是当我尝试从我的表单中发布数据时,我收到了这个错误,
Access to XMLHttpRequest at 'https://yyyyyyy.execute-api.ap-south-1.amazonaws.com/test' from origin 'http://xyz.s3-website.ap-south-1.amazonaws.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我已在我的 API 网关上启用了 CORS。我在启用 CORS 后部署了它。
我正在使用 AJAX 发布。这是当我单击表单上的按钮时执行的函数。
function submitToAPI(e)
e.preventDefault();
var URL = "https://yx1wm602z6.execute-api.ap-south-1.amazonaws.com/test";
var name = $("#username").val();
var desc = $("#desc").val();
var diff=$("#difficulty").val();
var dataa =
username : name,
difficult:diff,
desc : desc
;
$.ajax(
type: "POST",
url : "https://yyyyy.execute-api.ap-south-1.amazonaws.com/test",
dataType: "json",
contentType: 'application/json; charset=utf-8',
crossDomain: true,
data: JSON.stringify(dataa),
success: function (data)
alert("Successfull. Thank you for submitting");
,
error: function (e)
alert("UnSuccessfull"+JSON.stringify(e));
);
我在 Python 中填充 DynamoDB 的 lambda 函数如下,
import boto3
import json
dynamodb = boto3.client('dynamodb')
def lambda_handler(event, context):
username = event['username']
difficult=event['difficult']
desc=event['desc']
dynamodb.put_item(TableName='users', Item='username':'S':username,'difficult'
'S':'difficult','desc':'S':desc)
在我的 S3 存储桶中,我添加了 JSON 格式的 CORS 策略,因为不再支持 XML。
[
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
,
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
,
"AllowedHeaders": [],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"http://xyz.s3-website.ap-south-1.amazonaws.com"
],
"ExposeHeaders": []
]
任何形式的建议肯定会对我有所帮助。我一直在寻找解决方案,但实际上没有任何效果。
【问题讨论】:
为什么你的函数中有两个lambda_handler
?
@Marcin 那是个错误。我已经编辑了帖子。很抱歉。
【参考方案1】:
这是一个微小的错误。我没有在我的 API URL 中指定资源名称。添加 URL 解决了。 如果我能得到更好的错误响应就好了。
【讨论】:
以上是关于从托管在 S3 存储桶上的站点访问 AWS API 时出现 CORS 问题 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章