【问题标题】:How to solve CORS redirection with express js router?如何使用 express js 路由器解决 CORS 重定向?
【发布时间】:2017-08-11 23:00:08
【问题描述】:

我正在尝试实现 OAuth2 身份验证。当我尝试发送授权码时出现此错误:

XMLHttpRequest 无法加载链接 1。 从链接1重定向到链接2 已被 CORS 策略阻止:请求需要预检,即 不允许跨域重定向。

我的 req/rsp 看起来像这样:

一般: 请求网址:link1 请求方法:OPTIONS 状态码:204 否 内容远程地址:

响应标头:HTTP/1.1 204 No Content X-Powered-By: Express 访问控制允许来源:* 访问控制允许方法: GET、HEAD、PUT、PATCH、POST、DELETE 访问控制允许标题: 内容类型,sessionid 日期:

请求标头:OPTIONS /authorize HTTP/1.1 主机:主机连接: 保持活动访问控制请求方法:POST 来源:origin_link 用户代理:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, 像壁虎)Chrome/56.0.2924.76 Safari/537.36 Access-Control-Request-Headers: content-type, sessionid Accept: / 引用者:origin_link/dialog 接受编码:gzip、deflate、sdch、br 接受语言:en-US,en;q=0.8

【问题讨论】:

  • 如果您升级到 Chrome 57,则不应再点击“请求需要预检,不允许遵循跨域重定向”。错误。 (该规范过去要求浏览器禁止在预检中进行跨域重定向,但随后进行了更改,在 Chrome 56 发布后,Chrome 源代码已更新以符合当前规范要求。)

标签: javascript node.js oauth-2.0 cors http-redirect


【解决方案1】:

也许你没有配置 express 来接受 CORS 请求。

在一个小型项目中,我必须在 Express 应用程序中配置 CORS 请求。我的代码是:

// Enable CORS
app.use((req, res, next) => {
   res.header('Access-Control-Allow-Origin', '*');
   res.header('Access-Control-Allow-Methods', 'GET,POST,DELETE');
   res.header('Access-Control-Allow-Headers', 'Origin, X-Requested With, Content-Type, Accept');
   next();
});

app是一个Express实例对应的变量。

此外,我确实找到了一个 npm 包来将 CORS 请求设置为 express 应用程序,但我从未使用过它: https://github.com/expressjs/cors

【讨论】:

  • 感谢您的快速响应,但我已经尝试了所有这些方法,但仍然无法正常工作。我认为问题在于重定向,因为在 CORS 文档中,它说当状态码为 3xx 时只是拒绝连接,但我不知道如何解决它。
  • 好吧我明白了,通常当你使用 CORS 时,这是因为你使用 AJAX 请求。所以你可以做一个“假”重定向,所以它不是表示重定向的人而是客户端的javascript。当客户端收到您的“假”重定向时,javascript 会更改页面内容。
  • 不是真的@NikhilAggala,你应该在 StackOverflow 上提出你自己的问题并描述你的问题,社区会很快回复你。在我看来这个话题太老了,不会有其他工作了。
猜你喜欢
  • 2021-04-08
  • 2017-03-23
  • 1970-01-01
  • 2021-11-08
  • 2014-01-20
  • 2023-03-15
  • 2021-01-23
  • 1970-01-01
  • 2018-02-27
相关资源
最近更新 更多