call api cors domain



我对cors有问题。我想从另一个域2调用另一个域名1上的端点(无法更改为https(。

有可能吗?

我有这个错误:

> Access to XMLHttpRequest at
> 'http://192.168.1.140:8090/app1/auth/login' from origin 'http://app2'
> has been blocked by CORS policy: Response to preflight request doesn't
> pass access control check: No 'Access-Control-Allow-Origin' header is
> present on the requested resource

应用1:带有axios 的vuejs

axios
.post('/auth/login', {
username: username,
password: password
})

App2:java与球衣

更新时间:19/03 15:40:

@OPTIONS
@Path("/login")
public Response login() {
return Response.status(200).header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}

@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
@Path("/login")
public Response login(@FormParam("username") String username, @FormParam("password") String password) {
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}

更新时间:19/03 16:08

我删除了vuejs 中的两行

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.token;

现在可以了,但我如何从https调用http端点

谢谢

查看浏览器中的"网络"选项卡(Chrome中的Control-Shift-J>Network(。您看到的第一件事可能是对登录URL的请求。

但是,如果您查看该方法,它是一个OPTIONS请求,而不是POST请求。我猜它会返回一个404或405错误,这两个错误都没有您之前添加的CORS头。

您需要将OPTIONS方法添加到资源中。类似这样的东西:

@OPTIONS // options rather than post
@Path("/login")
public Response loginOptions() { // no parameters here
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}

有些人通过添加Filter来简化这一点,Filter是一个单独的类,它为对代码进行的任何OPTIONS调用返回此响应。

最新更新