spring-boot - CORS 应该如何工作,Spring Boot 是否做对了?
问题描述
首先,请纠正我对CORS机制的理解。
在非常高的层次上,我的理解是
- 发送带有
Origin
标头和 url 值的请求http://example.com
- 如果 origin 是白名单之一,则返回带有
Access-Control-Allow-Origin
:标头的成功响应http://example.com
- 如果 origin 不是白名单之一,则返回 403 Forbidden
再深入一点,我想知道究竟是什么设置了标题以及究竟是什么引发了 403。
是不是这样
- 浏览器自动设置
Origin
标题 - 如果 origin 没有被列入白名单,那么无论如何都会返回一个成功的响应,只是没有
Access-Control-Allow-Origin
响应头 - 然后浏览器将丢失
Access-Control-Allow-Origin
的内容转换为 403
或者是不是这样
- 浏览器自动设置
Origin
标题 - 服务器看到源不在白名单上,并返回 403 响应
所以我的问题是
谁负责生成 403?上述方案 1 中的浏览器或上述方案 2 中的服务器?
我问是因为在泽西世界,我们有一个似乎遵循上述场景 1 的实现。但在 Spring Boot 世界中,Cors 似乎遵循场景 2。
编辑
从下面的评论中,听起来 Spring Boot 通过抛出 403 所做的比它需要做的更多。现在我的新问题是,如果源不在白名单中,有没有办法防止 Spring Boot 自动抛出返回 403,但是而不是Access-Control-Allow-Origin
按照 CORS 协议定义的那样设置
解决方案
推荐阅读
- laravel - Laravel mix 只编译应用程序文件,其他只是重新复制
- slack-api - 在创建应用程序时选择范围与在安装期间传递范围的目的是什么?
- c# - LinqKit Predicate Or with Contains 计算为等于
- bash - 在 bash 脚本中将 sed 命令合并为一个命令
- javascript - 无法将数组发送到控制器
- apache-spark - 在 spark submit 中使用 Redshift JDBC Jar,不要让 spark 连接到 Glue 目录
- javascript - Javascript 在 div 中发布
- javascript - 更新条形图时删除旧文本标签
- java - 从 href-attribute 获取 HTTP URL(链接的所有可能方式)
- swift - 导航栏消失 Xcode10