#3844·hyper

允许自定义服务器的默认错误响应

作者: stevenj创建于 2025年1月31日更新于 2026年9月14日
标签A-serverC-featureE-mediumA-http1

**版本** 1.6.0 **平台** Linux x86-64 **描述** 当 hyper 获得包含 0x7f 的头部时,它会生成一个没有指定内容类型和无体的 400 响应。 问题在于,我们的服务 OpenApi 规范定义了 400 的不同响应,这与我们服务端点的行为相匹配。 然而,OpenAPI 3.0.x 只允许您为同一个响应代码定义多个响应类型,前提是它们都具有内容类型。 每个不同的内容类型只能有一个响应模板。 这破坏了我们的 CI。 我们的自动化测试触发了 hypers 默认的 400 响应。 该响应不符合我们的 OpenAPI 规范,因此破坏是 100% 正确的。 无法定义包含 hypers 400 响应和我们设计的 400 响应的 OpenAPI 规范。 结果是,Hyper 占据了 400,如果我们想要一个有效的 OpenAPI 规范和 100% 反映它的服务,我们就无法重新定义它。 因此,如果我们想使用 400 并拥有有效的规范,我们只能在错误中不返回任何信息,这对我们来说是不可能的。 这意味着我们根本无法使用 400。 有趣的是,hyper 内部评论说响应可以是任何 4xx,但用于自定义 `Server` 结构的特性并不在 crate 外部公开,因此已经证明不可能让 Hyper 具有与空的 400 响应不同的行为,没有内容类型。 我们花了大量时间尝试解决这个问题,但我们是否漏掉了什么,是否可以重新定义 hyper 为 400 返回什么内容?