从 JS 调用 CORS 错误的 Golang 重定向

Posted

技术标签:

【中文标题】从 JS 调用 CORS 错误的 Golang 重定向【英文标题】:Golang Redirect from JS call CORS error 【发布时间】:2016-08-24 20:46:21 【问题描述】:

当被 javascript 提取函数调用时,我的 golang 函数不会重定向到任何地方。这是我之前的问题的扩展,这个问题太宽泛了。 Facebook Oauth CORS error

这是我调用 golang api 的 javascript 获取函数。

let config = 
  method: 'GET',


fetch("http://localhost:7001/testFunction", config).then(response => 
  ...

这是我之后尝试重定向的 golang 函数

func testfunc(w http.ResponseWriter, r *http.Request) 
    http.Redirect(w,r,"https://www.facebook.com/dialog/oauth?..", 302)
    http.Redirect(w, r, "http://localhost:7001/", 302)
    http.Redirect(w, r, "http://google.com/", 302)

结果应该是页面重定向到域外的页面,但我一直在网络上收到此错误。

Fetch API cannot load http://google.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我无法使用 no-cors 模式,因为我需要重定向到该页面,甚至需要返回一个 json。

我确保 golang 服务器标头正确并允许 javascript 源 (localhost:3000)。我确保 facebook 上的 oauth api 允许 golang 服务器域(localhost:7001)。然而,当访问 localhost 域范围之外的域时,重定向总是被阻止。

【问题讨论】:

正如@OneOfOne 在回答中所说,你不能那样做。您的 JS 代码必须发出重定向,并且仅当它在同一站点上嵌入 JS 时。否则,您将收到 CORS 错误。 【参考方案1】:

你不能这样做,你必须真正重定向浏览器(在弹出窗口或其他东西中打开它)。

【讨论】:

谢谢!我最初在服务器中处理重定向,因为这就是我最初学习 oauth2 的方式。我认为服务器是处理密钥交换和重定向。但是使用 javascript 前端,我可以自己获取 url。所以我只是将 window.location 与解析后的 URL 一起使用。

以上是关于从 JS 调用 CORS 错误的 Golang 重定向的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular Js(Java Web)调用 API 时出现 CORS 错误

尝试从部分视图重定向用户时出现CORS错误

ReactJS 发送 GET 请求,响应 302 重定向,收到 CORS 错误

Axios 前端到 Golang 后端 CORS 问题

Express.js 对 Angular CORS 错误的响应

尝试使用 next-connect 在 Next.js 中从 http://localhost:3000 重定向到 https://api.twitter.com 时出现 CORS 错误?