我一直在为下面的错误苦苦挣扎。我尝试了很多教程和stackoverflow答案,但是没有一个解决方案能够解决我的问题。
跨源资源共享(CORS)策略阻止从源 'http://localhost:3000' 访问 'https://xxx' 的XMLHttpRequest。响应预检请求未通过访问控制检查:所请求的资源上不存在“Access-Control-Allow-Origin”头。
我正在使用SAM serverless创建我的api。
template.yaml:
Globals:
Function:
Timeout: 10
Api:
Cors:
AllowMethods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
AllowOrigin: "'*'"
我的Lambda函数: 我的GET响应和OPTIONS响应都返回以下标头:
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": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
}
使用amplify在我的ReactJs应用程序中获取API:
API.get(apiName, path, {
headers: {
"Access-Control-Allow-Origin": "*",
// "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with",
// "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE",
// 'Content-Type': 'application/json'
}
})
我已经尝试了在我的template.yaml、lambda函数和reactJs项目中使用的Access-Control-Allow-Headers和Access-Control-Allow-Methods的每种组合。
当我在API端点上调用postman中的选项时,这是我的结果。因此,根据我的理解,我的API允许CORS,并且我确实得到了正确的标头。