【发布时间】:2017-11-27 04:18:18
【问题描述】:
我有一个网页可以向其他子域(subdomain1.domain.com -> subdomain2.domain.com)中的另一个页面进行 POST,我知道我需要配置 cors 以允许这种情况。我做了所有的配置,它可以在 CHROME、Firefox 和 IE11 中运行 ..
但有一个例外,仅在 IE11 ON MY CLIENT NETWORK 中,请求不起作用返回“在 access-control-allow-origin 标头中找不到来源”
我发现它发生是因为在我的客户端网络中,请求没有返回 SECURITY 标头。下面的图片可以更好地解释它:
IE11 在我的客户端网络之外(红色的 CORS 从服务器返回)
IE11 INSIDE MY CLIENT NETWORK(服务器没有返回安全标头)
JAVA CODE SERVER CORS FILTER(服务器没有安全头返回)
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
}
}
【问题讨论】:
-
是的,看起来服务器没有在对 IE11 的响应中发送 CORS 标头。解决方案是让服务器向 IE 发送与向 Chrome 发送相同的标头。您需要显示有关如何配置服务器以及您正在使用的服务器端软件的信息,否则没有人会猜到服务器不发送 CORS 标头的原因。
-
谢谢,我已经用返回 cors 的服务器过滤器更新了这个问题。它是托管在 jboss 7.1.1 上的 java 过滤器
标签: java networking cors internet-explorer-11 infrastructure