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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:45:55