【问题标题】:Does it make any sense for a `HTTP/1.1` response to return HTTP status code `421 Misdirected Request`?`HTTP/1.1` 响应返回 HTTP 状态代码 `421 Misdirected Request` 是否有意义?
【发布时间】:2019-05-03 03:09:11
【问题描述】:

我目前正在调试来自 API 的令人惊讶的“错误请求”响应。

请求:

POST /path HTTP/1.1
...

回复:

HTTP/1.1 421 Misdirected Request
Date: Fri, 30 Nov 2018 21:59:12 GMT
...
Via: https/1.1 subdomain.example.org (ApacheTrafficServer/7.1.4)
...

根据我的研究,HTTP 状态代码 421 仅与 http/2 specification 一起添加。如您所见,我的客户端正在发送 HTTP1.1 请求。

在响应 HTTPS/1.1 请求时使用它是否有意义?这意味着什么?


更新:进一步研究表明,这个 421 响应是由 header 中的无效 CSRF 令牌和 Cookie 值触发的,使用可验证的有效组合重试请求会返回预期结果为 200 OK。不幸的是,这并不能真正解释任何事情。

【问题讨论】:

    标签: http-status-codes http2 http-1.1 http-status-code-421


    【解决方案1】:

    为 HTTP/2 添加了 421,允许连接重用。如果客户端错误地重用了连接 (like Firefox used to),那么服务器应该对此做出响应。

    但这并不意味着它只是一个 HTTP/2 状态码。例如,如果负载均衡器接收 HTTP/2 请求并通过 HTTP/1.1 将它们传递给后端服务器,那么如果其中一个后端服务器认为它错误地发送了该请求,则可以拒绝通过 HTTP/1.1 的请求。如您所见,您的请求是通过 Apache Traffic Server 发送的,所以我怀疑这就是这里发生的情况。

    【讨论】:

    • 谢谢,好点子。虽然:客户端绝对不会重用任何连接并发送 HTTP/1.1 请求。 Apache Traffic Server 使用 HTTP/2 并在内部选择了错误的服务器是否有意义?
    • 我认为最常见的 HTTP 1.1 用例(如果它确实有效)是用于虚拟主机环境中的未知 Host 标头值。
    • 可能可以用于此,但在这种情况下,大多数服务器只是默认为第一个 vhost,并且不确定他们是否有兴趣更改此设置(至少默认情况下)。
    猜你喜欢
    • 2019-05-18
    • 2023-04-01
    • 2011-04-19
    • 2016-12-18
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多