CORS: источник не найден в заголовке access-control-allow-origin (IE11)

у меня есть веб-страница, которая выполняет POST на другую страницу в другом субдомене (subdomain1.domain.com -> subdomain2.domain.com), и я понимаю, что мне нужно настроить cors, чтобы разрешить эту ситуацию. Я сделал все конфиги, и он работает в CHROME, FIREFOX И IE11 ..

но есть исключение, только в IE11 В МОЕЙ КЛИЕНТСКОЙ СЕТИ запрос не работает, возвращая «источник не найден в заголовке access-control-allow-origin»

я обнаружил, что это происходит потому, что в моей клиентской сети запрос не возвращает заголовок SECURITY. Изображения ниже могут объяснить это лучше:

IE11 ВНЕ МОЕЙ КЛИЕНТСКОЙ СЕТИ (выделено красным цветом CORS, возвращаемый с сервера)

ВНЕШНЯЯ КЛИЕНТСКАЯ СЕТЬ IE11

IE11 ВНУТРИ МОЕЙ КЛИЕНТСКОЙ СЕТИ (от сервера не возвращается заголовок безопасности)

введите здесь описание изображения

ФИЛЬТР CORS JAVA CODE SERVER (от сервера не возвращается заголовок безопасности)

public class CorsFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse resp = (HttpServletResponse) servletResponse;

    resp.addHeader("Access-Control-Allow-Origin", "https://intranet2.culturainglesa.net");
    resp.addHeader("Access-Control-Allow-Credentials", "true");
    resp.addHeader("Access-Control-Allow-Methods", "GET,POST");
    resp.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    // Just ACCEPT and REPLY OK if OPTIONS
    if (request.getMethod().equals("OPTIONS")) {
        resp.setStatus(HttpServletResponse.SC_OK);
        return;
    }

    chain.doFilter(request, servletResponse);
}

@Override
public void destroy() {
    // TODO Auto-generated method stub

}

}


person Cateno Viglio    schedule 23.06.2017    source источник
comment
Да, похоже, что сервер не отправляет заголовки CORS в ответ на IE11. Решение состоит в том, чтобы заставить сервер отправлять в IE те же заголовки, что и в Chrome. Вам нужно показать информацию о том, как настроен сервер и какое программное обеспечение на стороне сервера вы используете, иначе никто не сможет догадаться, почему сервер не отправляет заголовки CORS.   -  person apsillers    schedule 23.06.2017
comment
спасибо, я обновил вопрос с фильтром сервера, который возвращает cors. Это java-фильтр, размещенный на jboss 7.1.1.   -  person Cateno Viglio    schedule 23.06.2017


Ответы (1)


Проблема была не на стороне сервера или CORS, а в IE11, который не отправляет учетные данные в этой конкретной ситуации через AJAX:

САЙТ ЗОНЫ ИНТЕРНЕТ -> САЙТ ЗОНЫ ИНТРАСЕТИ

после изменения этих двух поддоменов на ДОВЕРЕННУЮ ЗОНУ проблема была решена.

это вопрос, который помогает мне решить:

Доступ запрещен в IE 10 и 11, когда цель ajax — локальный хост

person Cateno Viglio    schedule 26.06.2017
comment
Мне потребовалось много времени, чтобы найти эту идею, но это сделало это для меня. Запрос CORS отлично работал в Chrome и Firefox, но не в IE. После сравнения заголовков запроса я понял, что флаг Origin не отправляется в IE. Не знаю, почему, но как только я добавил наш локальный домен интрасети, все заработало. - person jaredbaszler; 13.02.2020