【问题标题】:How to enable Angular $http redirect on CORS如何在 CORS 上启用 Angular $http 重定向
【发布时间】:2015-04-29 14:30:25
【问题描述】:

我有一个启用了 CORS 的 node/express 应用程序

当我向我的应用发布 /login 时,会重定向到 /failure/success

但我总是得到一个

XMLHttpRequest cannot load http://exampledomain.com/login. The request was redirected to 'http://exampledomain.com/success', which is disallowed for cross-origin requests that require preflight.

$http 向服务器发出两个请求

OPTIONS 请求

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://otherdomain.com
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET,PUT,POST,PATCH,DELETE
Access-Control-Allow-Headers: accept, content-type
Connection: keep-alive

选项响应

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://otherdomain.com
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET,PUT,POST,PATCH,DELETE
Access-Control-Allow-Headers: accept, content-type
Connection: keep-alive

POST 请求

POST /admin/login HTTP/1.1
Host: exampledomain.com
Connection: keep-alive
Content-Length: 43
Accept: application/json, text/plain, */*
Origin: http://otherdomain.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2267.0 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://otherdomain.com
Accept-Encoding: gzip, deflate
Accept-Language: es-419,es;q=0.8

POST 响应

HTTP/1.1 302 Moved Temporarily
Vary: X-HTTP-Method-Override, Origin, Accept
Access-Control-Allow-Origin: http://otherdomain.com
Access-Control-Allow-Credentials: true
Location: /success
Content-Type: text/plain; charset=utf-8
Content-Length: 45
set-cookie: cookie-data; Path=/; HttpOnly
Connection: keep-alive

我认为标题是正确的,但 Location 标题缺少某些内容。可以帮我解决这个问题

我正在使用 $http 进行请求,如下所示

$http.defaults.useXDomain = true;
$http.post('http://exampledomain/login', {
  username: 'user',
  password: 'pass'
}).success(...).error(...)

但永远不会成功

【问题讨论】:

  • 问题在于重定向。发送预检请求以确保请求可以继续,但您重定向,因此不再验证预检。我不太明白您为什么要进行重定向,但为什么不在成功处理程序中发出单独的请求?

标签: angularjs express cors


【解决方案1】:

没有为 http://exampledomain.com 启用 CORS,因此无法向它发出任何请求。事实上,浏览器会进行预检检查,由于失败,请求实际上并没有发送到服务器。

更改此设置的唯一方法是在您的域的服务器上启用 CORS。

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 2016-08-14
    • 2019-07-21
    • 2014-07-29
    • 1970-01-01
    • 2015-05-29
    • 2018-11-16
    相关资源
    最近更新 更多