вызов домена api cors - PullRequest
       75

вызов домена api cors

0 голосов
/ 19 марта 2020

У меня проблема с корсами. Я хотел бы вызвать конечную точку, которая находится в другом домене1 (не может измениться на https) из другого домена2.

Возможно ли это?

У меня есть эта ошибка:

> 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: vuejs с топором ios

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

Приложение 2: 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;

Теперь это работает Но как я могу вызвать конечную точку http из https ?

Спасибо

1 Ответ

0 голосов
/ 19 марта 2020

Посмотрите на вкладку Сеть в вашем браузере ( Управление - Сдвиг - J > Сеть в Chrome) , Первое, что вы видите, это, вероятно, запрос вашего 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();
}

Некоторые люди упрощают это, добавляя фильтр , который представляет собой отдельный класс, который возвращает этот ответ для любого вызова OPTIONS, сделанного в вашем коде.

...