Spring Boot проглатывает заголовки Access-Control-Request-Header на предварительном просмотре OPTIONS

У меня есть приложение Spring Boot REST с очень простым фильтром CORS. Я хочу динамически отвечать на значения в заголовке Access-Control-Request-Headers, а не предоставлять конкретный список. Кажется, что общепринятым является явное задание значений, возвращаемых в "Access-Control-Allow-Headers", однако мы будем составлять белый список наборов источников и захотим разрешить любые отправляемые ими заголовки. Я не могу найти способ повторить значение Access-Control-Allow-Headers в Access-Control-Request-Headers.

Вот код

   @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
    throws IOException, ServletException {

    HttpServletResponse response = (HttpServletResponse) servletResponse;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, OPTIONS"); // will need to enable other methods when/as implemented
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers",
        ((HttpServletRequest) servletRequest).getHeader("Access-Control-Request-Headers"));
    filterChain.doFilter(servletRequest, servletResponse);
}

С этим запросом и ответом от Chrome (когда мы жестко программировали значение Access-Control-Allow-Headers)

Remote Address:10.199.240.16:443
Request URL:https://myapp.com/gradebooks/5566669e-e4b0-d05e-0150-98d7ffffffff/assignments/3ad7f1e7-679b-4d8b-856e-d2e3589eaad6
Request Method:OPTIONS
Status Code:200 OK

Response Headers
    view source
    Access-Control-Allow-Methods → POST, PUT, GET, DELETE, OPTIONS
    Access-Control-Max-Age → 3600
    Content-Type → application/hal+json; charset=UTF-8
    Date → Tue, 21 Jul 2015 20:42:29 GMT
    Server → Jetty(9.2.9.v20150224)
    Transfer-Encoding → chunked
    X-Application-Context → application

Request Headers
    view source
    Accept:*/*
    Accept-Encoding:gzip, deflate, sdch
    Accept-Language:en-US,en;q=0.8
    Access-Control-Request-Headers:accept, content-type
    Access-Control-Request-Method:PUT
    Connection:keep-alive
    Host:gbservices-api.dev-prsn.com
    Origin:http://localhost:3000
    Referer:http://localhost:3000/
    User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36

Это ошибка

XMLHttpRequest не может загрузить https://myapp.com/gradebooks/5566669e-e4b0-d05e-0150-98d7ffffffff/assignments/3ad7f1e7-679b-4d8b-856e-d2e3589eaad6. Поле заголовка запроса Content-Type не разрешено Access-Control-Allow-Headers.

Что я обнаружил при отладке в фильтре, так это то, что Access-Control-Request-Headers и только этот заголовок отсутствуют к тому времени, когда он попадает в фильтр. Ошибочный заголовок, и он прибывает, так что кажется, что что-то перехватывает заголовок и отбрасывает его, прежде чем он попадет в мой фильтр...

0 ответов

Другие вопросы по тегам