Spring Data REST CORS - 如何处理预检选项请求?

标签 spring cors spring-data-rest http-options-method

我正在使用 Spring Data REST 构建 RESTful API。直到现在,我的这个 RESTful 服务的 HTML GUI 是从同一个 Tomcat 提供的,我没有遇到跨源请求的问题。

现在我想从不同的服务器提供静态文件。这意味着 API 在另一个域/端口上。浏览器将发送 OPTIONS 请求以从服务器获取访问控制 header 。不幸的是,Spring Data REST 不处理这些 OPTIONS 请求,甚至返回 HTTP 500。

我尝试创建一个自定义 Controller 来处理所有 OPTIONS 请求

@Controller
@RequestMapping(value = "/**", method = RequestMethod.OPTIONS)
public class OptionsController {

    @RequestMapping
    public ResponseEntity options() {
        return new ResponseEntity<Void>(HttpStatus.OK);
    }
}

这对 OPTIONS 有效,但随后所有其他请求(如 GET)都停止工作。

OPTIONS 请求通过 dispatchOptionsRequest 调度程序 servlet 参数打开。

最佳答案

tl;dr:目前 Spring Data REST 根本不响应 OPTIONS 请求。

可能值得在我们的 JIRA 中开张票.

Browsers will send the OPTIONS request to get the Access-Control headers from the server.

在某处指定了吗?如果是这样,如果票证描述包含指向该规范的链接,那就太好了。

关于您的解决方法的一些评论:

    Controller 方法上的
  1. @RequestMapping 覆盖了 method 属性,预计现在匹配所有 HTTP 方法,这就是为什么您会看到所有请求都被拦截的原因.因此,您也需要在那里将 OPTIONS 定义为 HTTP 方法(或者可能不是在类映射中)。
  2. 您没有返回任何 Allow header ,这是 OPTIONS 的全部目的。
  3. 我想知道这种方法在一般情况下是否有意义,因为一般情况下很难推断出受支持的 HTTP 方法。

关于Spring Data REST CORS - 如何处理预检选项请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410598/

相关文章:

asp.net - App_Start 中缺少 WebApiConfig.cs。我可以使用 Startup.cs 吗?

javascript - CORS - 不存在 'Access-Control-Allow-Origin' header

spring-boot - 使用 Spring Data Rest 时如何从组件扫描中排除 @Repository

java - DynamoDB Spring Boot 数据剩余 "PersistentEntity must not be null!"

java - 多模块 Spring Boot 和启动类

Spring boot 项目未解析依赖项 - 无法在 org.springframework.boot :spring-boot-starter-web:jar:2. 1.1.RELEASE 处收集依赖项

spring - 套接字超时异常 : null while opening New Spring Starter Project

angularjs - 设置授权 header 时,Angular 显示错误 405 方法不允许