fiber框架默认不内置cors支持,必须显式引入中间件;直接调用app.use(cors.new())且未配置参数会导致生产环境跨域失败或凭证失效,因其默认alloworigins为""且仅允许get/head方法,而启用allowcredentials时""被浏览器拒绝,必须指定确切源并显式声明allowmethods、allowheaders等字段。

Fiber 框架本身不内置 CORS 支持,必须显式引入中间件;直接写 app.Use(cors.New()) 而不配置参数,大概率导致生产环境被拒绝或凭证失效。
为什么 Fiber 的 CORS 中间件默认不生效
Fiber 的 cors.New() 默认只允许 GET 和 HEAD 方法,且 AllowOrigins 默认是 * —— 但一旦你启用 Credentials(比如带 Cookie 或 Authorization 头),* 就会被浏览器拒绝,必须指定确切源。
- 常见错误现象:
Access-Control-Allow-Origin响应头为*,但控制台报错 “The value of the 'Access-Control-Allow-Origin' header must not be the wildcard '*' when the request's credentials mode is 'include' - 根本原因:没设
AllowCredentials: true时,AllowOrigins可以用*;设了就必须写死域名,如https://myapp.com - 开发阶段可临时用
AllowOrigins: []string{"http://localhost:5173"},别留空或只写*
如何正确配置 Fiber 的 cors.New() 参数
关键不是“加中间件”,而是把每个字段的约束关系理清楚。漏掉 AllowMethods 或 AllowHeaders,预检(OPTIONS)就会失败,前端根本发不出主请求。
-
AllowOrigins:必须是字符串切片,不能是单个字符串;支持通配符前缀(如http://localhost:*),但不推荐用于生产 -
AllowMethods:至少包含你实际用到的动词,比如用了PUT或DELETE,就必须显式写进去,否则 OPTIONS 返回 405 -
AllowHeaders:前端若带了X-Auth-Token或Content-Type: application/json,这里就得列出来;*不被规范支持,得写全["Content-Type", "X-Auth-Token"] -
ExposeHeaders:仅当你前端 JS 需要读取自定义响应头(如X-Total-Count)时才需设置
OPTIONS 预检失败时怎么快速定位
别只看主请求的响应体,直接在浏览器 Network 面板里找类型为 OPTIONS 的请求,点开它的 Response Headers 看是否含以下三项:
-
Access-Control-Allow-Origin:值是否匹配当前页面 origin?是否和credentials冲突? -
Access-Control-Allow-Methods:是否包含你实际发起的 HTTP 方法? -
Access-Control-Allow-Headers:是否覆盖了你请求头里所有非简单字段?
如果这三项中任一缺失或值不对,说明 cors.New() 的参数没对齐前端行为。例如前端用 fetch(..., { credentials: 'include' }),后端却没设 AllowCredentials: true,预检就必然挂。
开发期 vs 生产期的配置差异
开发期图快,容易把 AllowOrigins 设成 ["*"] 并打开 AllowCredentials,结果部署后跨域直接崩——因为浏览器强制禁止这种组合。
- 开发期安全做法:
AllowOrigins: []string{"http://localhost:5173", "http://127.0.0.1:5173"},AllowCredentials: true,其他按需放开 - 生产期必须收口:
AllowOrigins列出所有合法域名(不含通配符),AllowMethods锁定最小集合(如["GET", "POST"]),AllowHeaders显式声明而非用* - 别依赖环境变量拼接
AllowOrigins字符串切片——Fiber 的 cors 中间件不自动解析逗号分隔字符串,必须传[]string
最常被忽略的是:Fiber 的 cors 中间件不会自动处理根路径重定向或静态文件路由的跨域头,如果你有 app.Static("/", "./public"),得单独给它加中间件或确保静态资源本身不触发跨域逻辑。











