1

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

情况如下:

我正在尝试使用以下请求连接到私有 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 标头?

谢谢

4

1 回答 1

0

我一直在努力解决同样的问题,但最终解决了。

您无法控制浏览器预检 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;
}   

}

于 2015-11-24T01:17:40.877 回答