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

Posted

技术标签:

【中文标题】如何处理无效的 CORS 预检请求?【英文标题】:How to handle an invalid CORS preflight request? 【发布时间】:2016-02-17 18:30:54 【问题描述】:

假设有一个 CORS 预检请求进入,但它为一个或多个 Access-Control-Request-* 标头指定了不受支持的值。服务器应该如何将此信息传回给浏览器?

一些例子:

浏览器使用Access-Control-Request-Method: PUT 发送预检请求,但服务器不允许对指定资源的 PUT 请求。 浏览器使用Access-Control-Request-Headers: X-PINGOTHER 发送预检请求,但服务器不允许/理解该标头。

我能找到的唯一线索位于W3C documentation,这表明如果预检响应出现问题,服务器应该“终止此请求”,但我不确定实际情况如何(服务器真的应该终止连接而不发回响应吗??)。

或者,服务器是否根本不需要验证,因为浏览器只需检查 Access-Control-Allow-* 响应标头就知道它做错了什么?

【问题讨论】:

【参考方案1】:

Tomcat's CORS Filter 在收到无效的 CORS 预检请求时返回 403 响应:

如果请求无效或不允许,则请求被拒绝,HTTP 状态代码为 403(禁止)。有一个flowchart 演示了此过滤器处理请求。

当然,文档没有解释为什么这样做,但至少它可以作为一个起点。

【讨论】:

以上是关于如何处理无效的 CORS 预检请求?的主要内容,如果未能解决你的问题,请参考以下文章