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

OpenAPI Generator忽略带下划线请求头,OpenAPI 3.0是否禁用下划线?

问题:下划线请求头在OpenAPI验证中被忽略,规范是否禁止下划线?

我有一个OpenAPI 3.0.0描述文件,其中多个请求头标记了required: true,但名称含下划线的请求头unique_id被OpenAPI Generator忽略。

OpenAPI规范代码片段

openapi: 3.0.0
info:
  version: 0.0.1
servers:
  - url: http://localhost:3000/myapi
paths:
  /place/{id}:
    get:
      x-eov-operation-id: find place
      x-eov-operation-handler: Ctrl
      parameters:
        - name: unique_id
          in: header
          required: true
          schema:
            type: string
          description: unique id
        - name: app-code
          in: header
          required: true
          schema:
            type: string
          description: unique id
      responses: <<continued with response definition>>

验证中间件代码片段

app.use(
  openapiValidator.middleware({
    apiSpec: yaml.load(fs.readFileSync(swaggerFilePath)),
    validateRequests: true,
    operationHandlers: path.join(__dirname + '/api/controllers')
  })
)

现象:app-code的请求头验证正常,但unique_id的验证被跳过。将unique_id改为unique-id后验证恢复正常。


解答

OpenAPI 3.0规范本身并不禁止请求头名称使用下划线,HTTP标准(RFC 7230)也允许请求头包含下划线字符。出现这个问题的原因大概率是你使用的验证工具(express-openapi-validator)的默认行为导致的:

  • 部分OpenAPI验证工具会默认遵循HTTP请求头的常见命名习惯(连字符分隔的kebab-case格式),对下划线格式的请求头支持不佳,甚至会自动转换名称格式,导致验证不匹配。
  • express-openapi-validator可能存在内部逻辑,将请求头名称转换为小写或kebab-case后再与规范匹配,下划线的unique_id被转换后无法和原定义对应,从而跳过验证。

解决建议

  1. 优先遵循HTTP请求头的通用命名规范,使用连字符分隔(如unique-id),这样能最大化兼容各类工具和服务器。
  2. 若必须保留下划线格式,检查express-openapi-validator的配置项,是否有可以关闭名称转换、开启严格匹配的选项,比如调整requestValidationOptions相关设置。
  3. 可以尝试在请求头参数定义中显式添加style: simple,强制验证器使用原始名称进行匹配。

内容的提问来源于stack exchange,提问作者Rajnish Mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:40:03