GIN框架CORSMiddleware未添加跨域头,OPTIONS请求返回301问题
问题排查与解决
核心原因
OPTIONS请求返回301状态码,说明请求触发了Gin框架的自动尾随斜杠重定向(比如请求路径为/api,但路由定义为/api/)。此时原请求的CORS中间件逻辑未被执行,重定向后的响应自然不会携带Access-Control相关头。
解决方案
1. 关闭Gin的自动重定向功能
在初始化路由时关闭尾随斜杠重定向,避免无意义的301跳转:
router := gin.Default() // 关闭自动尾随斜杠重定向 router.RedirectTrailingSlash = false
2. 调整中间件顺序,确保CORS中间件优先执行
将CORSMiddleware放在所有中间件的最前面,保证它能优先处理所有请求(包括OPTIONS预检请求):
router := gin.Default() router.RedirectTrailingSlash = false // CORS中间件必须第一个加载 router.Use(middlewares.CORSMiddleware()) router.Use(gin.Recovery()) router.Use(middlewares.AuthMiddleware())
3. 统一请求与路由的路径格式
检查前端请求路径和后端路由定义是否一致:
- 如果路由定义为
/api/,确保前端请求也使用/api/(带斜杠) - 反之如果路由定义为
/api,前端请求也保持不带斜杠的格式,从根源避免重定向触发
额外验证
修改后可以通过日志确认:当OPTIONS请求到达时,CORSMiddleware中的log.Infof是否正常输出。如果日志能打印,说明中间件已生效,此时响应头应该会包含Access-Control相关字段。
内容的提问来源于stack exchange,提问作者Deeksha Sharma
相关产品推荐
相关产品推荐

