【问题标题】:Pre-flight OPTIONS request in AugularJS not passing authorization headerAugularJS 中的飞行前 OPTIONS 请求未通过授权标头
【发布时间】:2015-12-14 11:15:03
【问题描述】:

我在堆栈溢出和谷歌上查看了许多类似的问题,但没有建议的解决方案对我有用。

情况如下:

我正在尝试使用以下请求连接到私有 api:

发布https://api.domain.com/oauth/token

我还需要传递 Authorization 和 Content-Type 标头。

问题是飞行前的 OPTIONS 请求没有显示这两个标头,这使得 api 返回一个 401 错误。

这已在 Firefox 和 Chrome 中进行了测试。

如果我尝试使用 HTTP 而不是 HTTPS,它会自动重定向到 HTTPS。

奇怪的是 Postman 工作的路线完全相同。 Postman 在 OPTIONS 请求中添加 Authorization 标头,因此问题不在服务器端。

如何确保 Angular $http 像 Postman 一样添加 Authorization 标头?

谢谢

【问题讨论】:

  • Postman 不受 CORS 限制。您是否控制您尝试访问的 api?
  • @charlietfl 不幸的是没有

标签: angularjs api http cors preflight


【解决方案1】:

我一直在纠结同样的问题,但终于解决了。

您无法控制浏览器预检 OPTIONS 请求,因此我不会尝试让浏览器添加它。 CORS preflight OPTIONS 请求不应该被认证,服务器应该只返回 200 OK 而不需要 Authorization & Content-Type。

在您的后端应用程序中,确保安全配置允许 OPTIONS 请求通过。在我的例子中,它是一个 Java 应用程序,所以这个配置在 web.xml 中。最后在我的后端代码中,如果我看到 OPTIONS 方法,我会回复 200,下面是 Java 和 Jersey REST 的示例

public class CORSRequestFilter implements ContainerRequestFilter{


@Override
public ContainerRequest filter(ContainerRequest request) {

    if (request.getMethod().equals( "OPTIONS" ) ) {

        ResponseBuilder sb = Response.status(Response.Status.OK);

        throw new WebApplicationException(sb.build());
    }


    return request;
}   

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2016-06-28
    • 2017-11-21
    • 2015-02-28
    • 2014-01-28
    • 2020-10-27
    • 2015-04-02
    相关资源
    最近更新 更多