Поле заголовка запроса Access-Control-Allow-Methods не разрешено Access-Control-Allow-Headers в предварительном ответе - PullRequest
0 голосов
/ 17 сентября 2018

Я использую Angular во внешнем интерфейсе и Jersey для внутреннего интерфейса. Я получаю исключение при выполнении моего запроса PUT. Это угловой код:

const header=new Headers({'Content-Type':'application/x-www-form-urlencoded'});
header.append("Access-Control-Allow-Methods", "POST");
header.append("Access-Control-Allow-Headers","Access-Control-Allow-Origin");

return this.http.post('http://localhost:8080',home,{headers: header})
    .pipe(map((response: Response)=>{return response.json();}));

Это мой фильтр на Джерси:

@Provider
public class CORSResponseFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {

        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        //headers.add("Access-Control-Allow-Origin", "http://podcastpedia.org"); podcastpedia.org       
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS");          
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"); 
    }

}

Это исключение:

Не удалось загрузить http://localhost:8080/ Поле заголовка запроса Access-Control-Allow-Methods не разрешено Access-Control-Allow-Headers в ответе перед полетом

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 17 сентября 2018

Удалите Access-Control-Allow-Methods и Access-Control-Allow-Headers из HttpHeaders в коде внешнего интерфейса. Эти заголовки должны быть отправлены как ответные заголовки с сервера (что вы и делаете в своем CORSResponseFilter).

Не удалось загрузить http://localhost:8080/ Поле заголовка запроса Access-Control-Allow-Methods не разрешено Access-Control-Allow-Headers в ответе перед полетом

Эта ошибка говорит о том, что заголовок ответа сервера Access-Control-Allow-Headers не включает Access-Control-Allow-Methods в значение заголовка (что не должно быть). Цель Access-Control-Allow-Headers - сообщить браузеру, какие заголовки запросов разрешено отправлять клиенту на сервер. В CORSResponseFilter вы можете видеть, какие заголовки вы разрешаете. Access-Control-Allow-Methods не один из них.

И пока вы можете, вы можете удалить все значения Access-Control-XX-XX в заголовке ответа Access-Control-Allow-Headers. Это не обязательно. Вы говорите, что клиент может отправлять эти заголовки запроса, чего он не должен делать.

Смотри также:

...