iris路由方法限制需明确区分:get/post等专用方法自动限流并返回405;any/match需手动校验method;options预检必须显式注册或配置cors allowmethods。

iris.Router 的 GET/POST 等方法只接受对应 HTTP 方法
直接用 iris.Get、iris.Post、iris.Put 这类方法注册的路由,底层已自动绑定且**仅响应指定方法**。比如:
app.Get("/api/user", handler) // 只响应 GET
app.Post("/api/user", handler) // 只响应 POST
app.Delete("/api/user", handler) // 只响应 DELETE
发错方法(如对 GET 路由发 POST)会直接返回 405 Method Not Allowed,无需额外配置。
用 iris.Any() 或 iris.Handlers() 时必须手动检查 method
如果你用了 iris.Any(匹配所有方法)或通过 iris.Handlers 注册了通用 handler,Iris 不会帮你拦截非法方法——它真就“any”了。这时候得自己判断:
- 读取
ctx.Request().Method字符串做对比 - 用
ctx.StatusCode(405)+ctx.Header("Allow", "GET,POST")显式返回标准错误 - 别只 return,否则客户端可能收到空响应或 200
示例:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
app.Any("/api/data", func(ctx iris.Context) {
if ctx.Request().Method != "GET" && ctx.Request().Method != "PUT" {
ctx.StatusCode(405)
ctx.Header("Allow", "GET,PUT")
ctx.WriteString("Method not allowed")
return
}
// 正常处理逻辑
})
iris.Match 和自定义 matcher 容易忽略 method 校验
用 iris.Match 做路径前缀匹配(比如 /api/*)时,它本身不约束 method,所有方法都会进入该组。常见误区是以为加了 Match 就能统一限制 method,其实不能。
- 若需按 method 分流,应优先用
Get/Post等专用方法注册 - 若必须用
Match,得在每个子 handler 里手动校验ctx.Request().Method -
iris.Match的第二个参数是handlers,不是 method 列表,别传[]string{"GET"}这种
OPTIONS 预检请求需要显式支持 CORS 场景
前端发跨域请求时,浏览器会先发 OPTIONS。如果你没注册 OPTIONS 路由,Iris 默认不响应,导致预检失败。
- 简单场景:用
app.Options("/path", corsHandler)单独注册 - 全局处理:用
app.UseGlobal拦截所有OPTIONS,但注意别覆盖掉你已定义的其他 method handler - 别依赖中间件自动回写
Allow头——Iris 的cors中间件默认不设Access-Control-Allow-Methods,要手动配cors.Config{AllowMethods: []string{"GET","POST"}}
method 限制看着简单,但混用 Any、Match 和 CORS 时,实际行为很容易和直觉不一致。










