【发布时间】:2026-01-14 04:20:02
【问题描述】:
Tomcat (7.0.50) 带来了一个实现 CORS 规范的特殊过滤器。在此过滤器中,允许的标头的默认列表如下:
Origin、Accept、X-Requested-With、Content-Type、Access-Control-Request-Method、Access-Control-Request-Headers。
我知道我可以使用过滤参数“cors.allowed.headers”替换该列表并指定我自己的标题列表。我知道。但我有以下问题:
- 创建此过滤器时,为什么列表中充满了这个 -abritrarily- 短标题列表?为什么是这些标题而不是其他标题?例如,为什么列表中没有“缓存控制”标头?这份名单是如何选出的?
- 如果我想定义一个更完整的列表,我应该包括哪些标题?有很多标题需要考虑!
- 我可以使用“*”而不是指定列表吗?这是 CORS 规范允许的吗?
- 我知道 CORS 规范定义了这种列表,但是……为什么有必要这样做?如果客户端请求的至少一个标头不在允许的标头列表中,为什么我们不能只接受飞行前 OPTIONS 步骤中的任何标头,而不是返回 403(禁止)?
- 为什么过滤器中没有选项来执行以下操作: response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers") ?
我很困惑。我的 API 的一位用户在飞行前步骤中发送了“Access-Control-Request-Headers”列表中的“cache-control”标头,并收到了 HTTP 403 错误状态。我可以将此标头添加到列表中(使用“cors.allowed.headers”过滤器参数)。但是下次某个客户端发送另一个不在列表中的标头时呢?
布赖恩
【问题讨论】: