首页 > 解决方案 > CORS 应该如何工作,Spring Boot 是否做对了?

问题描述

首先,请纠正我对CORS机制的理解。

在非常高的层次上,我的理解是

  1. 发送带有Origin标头和 url 值的请求http://example.com
  2. 如果 origin 是白名单之一,则返回带有Access-Control-Allow-Origin:标头的成功响应http://example.com
  3. 如果 origin 不是白名单之一,则返回 403 Forbidden

再深入一点,我想知道究竟是什么设置了标题以及究竟是什么引发了 403。

是不是这样

  1. 浏览器自动设置Origin标题
  2. 如果 origin 没有被列入白名单,那么无论如何都会返回一个成功的响应,只是没有Access-Control-Allow-Origin响应头
  3. 然后浏览器将丢失Access-Control-Allow-Origin的内容转换为 403

或者是不是这样

  1. 浏览器自动设置Origin标题
  2. 服务器看到源不在白名单上,并返回 403 响应

所以我的问题是

谁负责生成 403?上述方案 1 中的浏览器或上述方案 2 中的服务器?

我问是因为在泽西世界,我们有一个似乎遵循上述场景 1 的实现。但在 Spring Boot 世界中,Cors 似乎遵循场景 2。

编辑

从下面的评论中,听起来 Spring Boot 通过抛出 403 所做的比它需要做的更多。现在我的新问题是,如果源不在白名单中,有没有办法防止 Spring Boot 自动抛出返回 403,但是而不是Access-Control-Allow-Origin按照 CORS 协议定义的那样设置

标签: spring-bootcorsjersey

解决方案


403当源不匹配时,SpringBoot 在向 OPTIONS 请求发送时遵循它自己的实现。

默认Cors处理器

默认实现将响应状态设置为 403,并将“无效 CORS 请求”写入响应。


推荐阅读