如何在 nodejs express 重定向上启用 CORS?

Posted

技术标签:

【中文标题】如何在 nodejs express 重定向上启用 CORS?【英文标题】:How to enable CORS on nodejs express redirect? 【发布时间】:2019-05-15 08:43:18 【问题描述】:

我在后端使用 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 有关。如何使重定向起作用?

【问题讨论】:

How to allow CORS?的可能重复 这是不同的,因为我的问题是关于重定向而不是直接连接 【参考方案1】:

这与您的后端或前端无关,您必须在 S3 存储桶中添加 CORS 策略

请按照以下步骤在您的 S3 存储桶上启用 CORS

    登录 AWS 管理控制台并通过 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。

    在 Bucket name 列表中,选择要为其创建存储桶策略的存储桶的名称。

    选择权限,然后选择 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

【讨论】:

这是否适用于res.redirect?据我了解和知道 cors 不适用于redirect,但可以用于正常请求。 这里最好的选择是从前端返回url并重定向。 经过测试并与 res.redirect 配合良好。 CORS 策略必须在目的地而不是源上完成 我不知道你是如何让它工作的,但res.redirect(url) 对我不起作用。在这里查看我的问题示例***.com/questions/59758422/… 您必须在要重定向用户的目标网址上启用 cors,您将重定向到未启用 cors 的 google.com

以上是关于如何在 nodejs express 重定向上启用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

express - nodejs - 如果在子域中,则保留 URL 而不是重定向

使用 nodejs/express 登录后将用户重定向到 Angular 应用程序

Nodejs Express 重定向不起作用

页面未使用 express-session 和护照 nodejs 正确重定向

流星301重定向nodejs

如何使用反向代理处理 Express 应用程序中的重定向