最可靠方式是显式调用ctx.header()并手动校验,需trim后判空及格式,建议封装中间件;注意options预检请求须单独处理,否则上线必401。

如何在 Iris 路由中校验请求 Header
直接用 ctx.Header() 读取并手动判断最可靠,Iris 没有内置“Header 校验中间件”这种开箱即用的抽象。所有校验逻辑必须显式编写,否则 Header 会被忽略。
用 ctx.Header() 获取值并做空/格式校验
Iris 的 ctx.Header() 是大小写不敏感的,但返回值是原始字符串(可能为空或含空格),不能直接用于鉴权比对。
-
ctx.Header("Authorization")返回"Bearer xyz",需strings.TrimSpace()后再切分 -
ctx.Header("X-Api-Key")可能返回空字符串或仅空格,建议用len(strings.TrimSpace(val)) == 0判空 - 若要求 Header 必须存在且非空,不要只检查
!= "",要先 trim 再判长度
推荐封装成可复用的校验中间件
把 Header 提取、清洗、验证逻辑收进一个函数,避免每个路由重复写 if-else。注意:中间件里调用 ctx.Next() 前必须明确是否放行。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
func RequireAPIKey() iris.Handler {
return func(ctx iris.Context) {
key := strings.TrimSpace(ctx.Header("X-Api-Key"))
if key == "" || key != "secret123" { // 实际应查数据库或 JWT 解析
ctx.StatusCode(401)
ctx.JSON(iris.Map{"error": "invalid or missing X-Api-Key"})
return
}
ctx.Next()
}
}
注册时:app.Get("/data", RequireAPIKey(), handler)。注意中间件顺序——它必须在路由 handler 之前执行。
常见踩坑点:CORS 预检请求会绕过你的 Header 校验
浏览器发 POST/PUT 等跨域请求前,会先发 OPTIONS 预检。此时你的中间件也会执行,但预检请求不带业务 Header(如 X-Api-Key),直接返回 401 就会导致整个请求失败。
- 务必在中间件开头加
if ctx.Method() == "OPTIONS" { ctx.StatusCode(200); return } - 或者用 Iris 内置的 CORS 中间件(
iris.CORS())并配置AllowHeaders,但它不替代业务 Header 校验 - 不要依赖
ctx.IsAjax()判断——预检请求不是 AJAX,但也不等于普通请求
Header 校验本身很简单,真正复杂的是和 CORS、认证流程、错误响应格式的配合。漏掉预检处理,本地测试永远成功,上线就 401。










