首页 > 解决方案 > 最近我只在 Google Chrome 中遇到了 CORS 问题

问题描述

Google Chrome 最近遇到了一些主要的 CORS 问题:

从源“...”访问“...”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

奇怪的是,该请求在 Mozilla Firefox 上完美运行。
我尝试向服务器添加不同的标头,包括:

Access-Control-Allow-Headers : Content-Type,Authorization,X-Requested-With,Accept,Access-Control-Request-Method,Origin,Access-Control-Request-Headers
Access-Control-Allow-Methods : GET, POST, DELETE, PUT,OPTIONS,HEAD
Access-Control-Allow-Origin : *

在“CORS Block”之前还有一个 OPTIONS 请求方法 Google Chrome 发送我的服务器但在这里我得到一个500 服务器错误:

javax.servlet.ServletException:一个 MultiException 有 4 个异常。他们是:

  1. javax.ws.rs.ProcessingException:为 wadl 处理创建 JAXBContext 时出错。

  2. java.lang.IllegalStateException:无法执行操作:在 org.glassfish.jersey.server.wadl.internal.WadlApplicationContextImpl 上创建

  3. java.lang.IllegalArgumentException:在尝试解决 org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler 的依赖项时发现错误
  4. java.lang.IllegalStateException:无法执行操作:在 org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler 上解析

    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer. java:389) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229) org.apache.tomcat.websocket.server。 WsFilter.doFilter(WsFilter.java:53) com.isyndix.rest.CORSFilter.doFilter(CORSFilter.java:40)


这有什么关系吗?

提前感谢您的帮助和时间。
干杯!

标签: google-chromerequestcors

解决方案


因此,显然这与服务器后端未正确处理 OPTIONS-preflight 有关。
我已经在 REST 端点中实现了 OPTIONS 方法:

@OPTIONS
public Response options() {
    return Response.ok().build();
}

请记住,这不是处理问题的好方法,因为您需要为 API 中的每个端点实现此功能。
但我没有找到更好的解决方案,这对我有用。

干杯!


推荐阅读