我正在使用nodejs express作为后端的API。我想知道如何在redirect
方法上启用CORS。
以下是我的明确重定向代码:
res.redirect(redirectUrl);
当客户端向上述API发送请求时,它将请求重定向到s3
,但出现以下错误:
Access to XMLHttpRequest at 'https://s3-ap-southeast-
2.amazonaws.com/index.html' (redirected from
'http://localhost:9090/v0/api') from origin 'http://localhost:9090' 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.
前端在http://localhost:9090
下运行,并且前端域已添加到s3存储桶中的CORS中。如果我直接从浏览器将请求发送到https://s3-ap-southeast-2.amazonaws.com/index.html
,它会很好地工作。因此,我认为问题出在nodejs express redirect
方法上。如何为重定向启用CORS?
我知道如何启用CORS
,但是我的问题与redirect
有关。如何使重定向工作?
答案 0 :(得分:4)
这与您的后端或前端无关,您必须在S3存储桶中添加CORS策略
请按照以下步骤在您的S3存储桶上启用CORS
登录到AWS管理控制台,然后在https://console.aws.amazon.com/s3/上打开Amazon S3控制台。
在“存储桶名称”列表中,选择要为其创建存储桶策略的存储桶的名称。
选择“权限”,然后选择“ CORS配置”。
在CORS配置编辑器文本框中,键入或复制并粘贴新的CORS配置,或编辑现有配置以使其如下所示。
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> </CORSRule> </CORSConfiguration>
这应该对您有用。
参考:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html
答案 1 :(得分:0)
CORS规则适用于相同的主机名,并且也绑定到相同的端口。因此,如果您有一个http://localhost:3001提供带有JavaScript的HTML文件,则不允许从http://localhost:3000加载内容。
要完全允许这种情况发生,并使客户端代码与服务器分离并仅加载数据,例如使用Angular,Ember,Backbone之类的框架,否则您可以在express之前使用以下中间件功能您定义路线:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});