AWS S3 API请求上托管的React应用失败

时间:2019-12-19 17:48:02

标签: reactjs amazon-s3 axios aws-api-gateway

我正在用create-react-app编写一个(单页)react应用,它调用了我的API,即AWS api网关和AWS lambda。我正在尝试使用AWS s3静态托管来托管react应用。

在本地进行开发时,由于缺少CORS标头,对我的API的请求(使用axios)被阻止了。要解决此问题,我在package.json文件中向我的AWS api网关域添加了代理:

"proxy": "https://***.execute-api.us-east-2.amazonaws.com/"

因此,请求在我的本地主机上运行,​​该应用程序托管在节点开发服务器上。但是,当应用程序托管在AWS S3上时,我无法使它正常工作。对我的API的axios请求始终失败,并出现403 Access denied个错误。

我的问题是,为什么请求失败,该如何解决?

编辑:我能够通过以下方法使我的一种API方法起作用:1)在API网关中为有问题的方法启用CORS,并使我的API返回标头:

{
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': '*'
}

带有方法响应。

现在,即使进行了上述更改,我的一种POST方法也无法使用,我得到了405个“不允许的方法”响应。我真的不知道我是否走在正确的轨道上。

3 个答案:

答案 0 :(得分:0)

您需要在API上启用CORS,因为您的请求来自S3域https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

答案 1 :(得分:0)

您需要在AWS IAM中配置用户应用。
如果您在部署后未配置用户,则由于权限问题,您的应用程序请求将失败。

答案 2 :(得分:0)

如果您不允许使用方法,则您尝试通过错误的http方法而不是配置的方法进行访问。例如,您已配置“ POST”,但尝试通过“ GET”进行访问