fiber.CORS()必须在路由注册前调用,否则不生效;带credentials时AllowOrigins不能为"*",须指定具体域名;其自动处理OPTIONS预检,但需避免前置中间件提前终止请求。

fiber.CORS() 中间件必须在路由注册前调用
如果你把 app.Use(fiber.CORS()) 放在 app.Get(...) 之后,它对这些路由完全不生效——Fiber 的中间件链是顺序执行的,后注册的中间件不会包裹已注册的路由。正确顺序是:初始化 app → 调用 app.Use(fiber.CORS(...)) → 再注册所有业务路由。
带 credentials 时不能用 AllowOrigins: "*"
前端若设置了 credentials: 'include'(比如传 Cookie 或 Bearer Token),fiber.CORS() 的 AllowOrigins 必须是具体域名切片,例如 []string{"https://app.example.com", "http://localhost:3000"}。若仍写 "*",浏览器会静默拦截响应,并在控制台报错:The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*'。
OPTIONS 预检请求由 fiber.CORS 自动处理,但需确认没被其他中间件干扰
Fiber 的 fiber.CORS() 内置了对 OPTIONS 方法的拦截和响应(返回 204),无需手动注册 OPTIONS 路由。但要注意:
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- 不要在
fiber.CORS()之前注册任何可能提前结束请求的中间件(如自定义日志、鉴权失败直接ctx.Status(401).Send()) - 避免在业务 handler 里重复设置 CORS 头,否则可能覆盖
fiber.CORS()的值,导致Vary: Origin缺失或Access-Control-Allow-Credentials冲突 - 如果用了
fiber.New()并启用了StrictRouting: true,确保预检路径与实际路由路径严格一致(比如/api/user的预检也必须是OPTIONS /api/user,而非OPTIONS /api/user/)
生产环境建议显式配置白名单和暴露头
默认 fiber.CORS() 允许全部方法和头部,不够安全。应至少指定:
立即学习“go语言免费学习笔记(深入)”;
-
AllowOrigins:明确域名列表,禁用通配符 -
AllowMethods:如"GET,POST,PUT,DELETE,OPTIONS" -
AllowHeaders:至少包含"Content-Type,Authorization"(若前端发 JSON 或带 Token) -
ExposeHeaders:如需前端读取X-Total-Count或X-Rate-Limit等自定义响应头,必须在此显式声明 -
AllowCredentials:仅当真需要 Cookie 或认证头时设为true,并同步校验Origin
漏掉 ExposeHeaders 会导致前端 response.headers.get("X-Custom") 返回 null,这个点最容易被忽略。


















