kas*_*erd 6 http https http-headers sni http-status-code
是否有适用于通过 SNI 或 HTTP Host 标头发送错误主机名(或根本没有)的客户端的 HTTP 状态代码?
一个较旧的问题首先解决了此类请求如何以及为何发生,以及如何在 Apache 中从技术上处理它们。然而,它没有解决响应状态代码的选择问题。
过去,我实现了一个 HTTP 代理,它会发送状态代码 502 和一个 html 页面,解释为什么会产生错误消息。我使用 502 的理由是期望我看到它主要是由于配置错误,这意味着代理找不到合适的后端。实际上,仅仅看到完全虚假的主机名的频率要高得多。
是否有另一个状态代码更合适,更清楚地向客户端发出信号,表明此 IP 地址上的服务器无法识别通过 SNI 和/或主机标头发送的值?
Mic*_*ton 15
在通过 SNI 发送的主机名与 HTTP 主机标头不匹配的情况下,RFC 6066 没有指定甚至推荐任何特定的 HTTP 错误。如果 SNI 主机名不是它提供服务的主机名,它确实建议服务器中止 TLS 握手。从第 3 节:
如果服务器理解 ClientHello 扩展但不识别服务器名称,则服务器应该采取以下两种操作之一:通过发送致命级别的 unrecognized_name(112) 警报来中止握手或继续握手。
由于这种格式错误的请求可以通过 TLS 握手并需要在 HTTP 中被拒绝,因此需要一个 HTTP 响应代码。在所有存在的那些中,只有一个真正适合这种情况:
400 (Bad Request) 状态码表示服务器由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由)而无法或不会处理请求。
这实际上是 RFC 7230 指定的响应。来自描述 Host 标头的第 5.4 节:
服务器必须以 400(错误请求)状态代码响应任何缺少 Host 头字段的 HTTP/1.1 请求消息,以及包含多个 Host 头字段或具有无效字段值的 Host 头字段的任何请求消息.
我强烈建议不要为此使用 502。它的语义表明服务器端出现问题,如果稍后尝试,请求将成功。
归档时间: |
|
查看次数: |
6658 次 |
最近记录: |