是否有适合通过 SNI 或 HTTP Host 标头发送错误主机名(或根本没有)的客户端使用的 HTTP 状态代码?
一个较老的问题首先解决了此类请求如何发生以及为什么发生,以及如何在 Apache 中从技术上处理它们。然而,它没有解决响应状态代码的选择。
过去,我实现了一个 HTTP 代理,它会发送状态码 502 和一个解释错误消息产生原因的 html 页面。我使用 502 的理由是,我主要会因为配置错误而看到它,这意味着代理无法找到合适的后端。实际上,简单地看到完全伪造的主机名的频率要高得多。
是否有另一个更合适且更清晰的状态代码向客户端表明此 IP 地址上的服务器无法识别通过 SNI 和/或 Host 标头发送的值?
在通过 SNI 发送的主机名与 HTTP Host 标头不匹配的情况下,RFC 6066 没有指定甚至推荐任何特定的 HTTP 错误。如果 SNI 主机名不是它为其提供服务的主机名,它确实建议服务器中止 TLS 握手。从第 3 节开始:
由于这种格式错误的请求可以通过 TLS 握手并需要在 HTTP 中被拒绝,因此需要一个 HTTP 响应代码。在所有存在的那些中,只有一个真正适合这种情况:
事实上,这是 RFC 7230 指定的响应。从第 5.4 节描述 Host 标头:
我强烈建议不要为此使用 502。它的语义表明服务器端有问题,如果稍后尝试,请求将成功。