You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务端开发者如何正确拒绝CORS预检请求?

服务端主动拒绝CORS请求的正确实现方法

CORS校验逻辑由浏览器原生实现,服务端要让跨域调用彻底失败,核心是不给浏览器返回任何跨域许可凭证,配合预检请求拦截即可,具体操作如下:

1. 优先拦截预检OPTIONS请求

所有非简单跨域请求,浏览器都会先发送OPTIONS方法的预检请求验证权限,你可以直接全局拦截这类请求:

  • 对所有OPTIONS请求直接返回403/405状态码
  • 不要返回任何CORS相关响应头,包括Access-Control-Allow-Origin、Access-Control-Allow-Methods等

如果你完全不需要对外开放跨域调用,直接全局拦截所有OPTIONS请求即可,不用处理后续业务逻辑。

2. 处理无预检的简单跨域请求

简单请求(GET/HEAD/POST类型,且请求头符合简单头规范)不会触发预检,浏览器会直接发送实际业务请求,这种场景你只需要做两件事:

  • 永远不要返回任何CORS相关的响应头,浏览器发现响应没有跨域许可凭证,会自动拦截响应内容,前端无法读取任何返回数据,同时抛出CORS报错
  • 可选增强校验:主动读取请求头的Origin字段,和自己的信任域名白名单对比,不在白名单内的请求直接返回403状态码即可

常见错误操作

  • 不要返回Access-Control-Allow-Origin: null,部分场景下浏览器会将null判定为合法源,反而放行请求
  • 不要返回无效的Access-Control-Allow-Origin值(比如随意填写非白名单域名),部分兼容性差的浏览器可能出现不可预期的放行逻辑,直接不返回该响应头才是最稳妥的方案
  • 不需要主动断开连接或者返回空响应,只要没有CORS许可头,浏览器会自动拦截响应,已经达到拒绝跨域调用的效果

示例:Nginx全局拒绝所有跨域请求的配置

# 拦截所有OPTIONS预检请求直接返回403
if ($request_method = OPTIONS) {
    return 403;
}
# 不需要添加任何CORS相关的add_header配置即可

内容的提问来源于stack exchange,提问作者mcfedr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:36:04