将 CORS 预检请求链接到其目标资源意味着啥

Posted

技术标签:

【中文标题】将 CORS 预检请求链接到其目标资源意味着啥【英文标题】:What does it mean for a CORS preflight request to be chained to its target resource将 CORS 预检请求链接到其目标资源意味着什么 【发布时间】:2016-07-24 15:59:16 【问题描述】:

我正在为 Jetty Servlet 配置 CORS,并发现一些 XHR 请求在预检时被拒绝。我已经设置了 Access-Control-Allow-Methods 和 Access-Control-Allow-Headers,并且根据 CrossOriginFilter 的 Jetty 文档,默认的 Access-Control-Allow Origin 标头是“*”。所以一切都应该被允许通过。

还有另一个过滤器选项,我在查找以下信息时遇到问题:

链预检 如果真正的预检请求链接到它们的目标资源 正常处理(作为 OPTION 请求)。否则过滤器会 对预检的响应。默认为真。

过滤器“响应预检”是什么意思?将请求链接到目标意味着什么?我发现的有关此选项的大多数资源都使用完全相同的措辞,并且没有提供任何进一步的解释。

在this *** response,作者说:

注意:CrossOriginFilter 有一个参数chainPreflight,默认设置为true。这需要设置为假。这是 CORS 转发 POST 而不是 OPTIONS 到 SOLR 的关键。此外,订单很重要!

虽然我没有构建 Solr 应用程序,但我想知道这是否是我的配置出错的地方。任何有助于更好地理解此选项的帮助将不胜感激!

【问题讨论】:

【参考方案1】:

如果 chainPreflight 选项设置为 true(默认情况下),则 CrossOriginFilter 将添加所需的访问控制标头,并将请求传递到端点以进行进一步处理。目标端点应该有一些处理预检请求的逻辑。

如果chainPreflight 选项为false,则CrossOriginFilter 将添加所需的访问控制标头并直接响应请求。

查看my blog post 获取插图。

【讨论】:

很棒的博文。我喜欢这个小图表! :) - 我从阅读文档中得出了同样的结论。但是很高兴找到该推理的确认。 - 对我来说,chainPreflight=false 似乎在我的应用程序中最有意义。 感谢您的反馈!我很难将我的头围绕在文档上,而绘图总是有帮助:)

以上是关于将 CORS 预检请求链接到其目标资源意味着啥的主要内容,如果未能解决你的问题,请参考以下文章

是否可以手动预检多个 CORS 资源?

骨干同步发送 CORS 预检,但之后啥也不做

如何重用 CORS 预检和资源请求之间的连接?

从服务工作者发送的 CORS 预检请求,但不是来自常规请求

如何处理无效的 CORS 预检请求?

如何为 CORS 预检请求绕过 AWS API Gateway 代理资源上的 Cognito 授权方?