重定向被 CORS 阻止

Posted

技术标签:

【中文标题】重定向被 CORS 阻止【英文标题】:Redirect blocked by CORS 【发布时间】:2018-12-23 20:08:46 【问题描述】:

我正在以 HttpServletResponse 的形式从 POST API 向 adfs 服务器发送重定向,其中包含状态为 302 的 URL,但它给出了以下错误

XMLHttpRequest 无法加载资源 A。从资源 A 重定向到 资源 B 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:9000” 访问。

其中资源 A 是我在“http://localhost:9000”上运行的 api,资源 B 是 adfs 服务器。

我将 API 中的 access-control-allow-origin 标头也设置为“*”。

当我使用 AngularJS 从我的 api 重定向到 Google 时,它​​会成功重定向。我是否需要更改 Web 中的 .htaccess 文件或需要更改 API?

我已经检查过了

How does Access-Control-Allow-Origin header work?

Redirect from A has been blocked by CORS policy. Origin B is therefore not allowed access

Understanding XMLHttpRequest over CORS (responseText)

【问题讨论】:

我认为您需要在您的 adfs 服务器上允许访问控制来源。你可以在那里找到:***.com/questions/44905898/… 我已经检查过了。在 adfs 服务器上是允许的。 【参考方案1】:

302 重定向在 XHR 请求中是不可能的。这就是浏览器的工作方式。浏览器不会重定向到该页面,而是将返回的 url 作为 API 调用,即另一个 XHR 请求。您需要使用前端应用程序传回重定向 url 进行重定向。

因为,我从 angular 调用了一个 api,而作为响应,API 正在重定向到 HTTP 状态为 302 的 adfs 服务器。这将被 CORS 阻止。

我通过将重定向 url 作为 API 的响应而不是 HTTP 302 重定向发送到 Angular 应用程序来解决这个问题,然后使用

$window.location.href=JSON.parse(result.data) //result.data 包含来自 api 的重定向 url

【讨论】:

【参考方案2】:

请求被“adfs 服务器”阻止,因为请求来源不明。您应该识别您的机器,因此“adfs 服务器”代理允许您拨打电话。 (这是为了防止来自未知来源的请求)

【讨论】:

以上是关于重定向被 CORS 阻止的主要内容,如果未能解决你的问题,请参考以下文章

CORS 请求重定向失败

Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向

如何解决“重定向已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头”?

“重定向已被 CORS 策略阻止”Vue Axios

XMLHttprequest 无法加载 [link]。从 [link] 重定向到已被 laravel 5 中的 CORS 策略阻止

Chrome 上的 NotFound net::ERR_TOO_MANY_REDIRECTS,SEC7127:针对 IE 上的 CORS 请求阻止重定向