421 错误的请求

mse*_*ert 14 ssl https apache-2.4

我偶尔会收到以下 421 错误:

错误的请求

客户端需要为此请求建立新连接,因为请求的主机名与用于此连接的服务器名称指示 (SNI) 不匹配。

但是,刷新浏览器会清除错误并且页面正常加载。下一次加载页面不会产生和错误,因此模式看起来很随机。我能看到的唯一模式是当我使用 header("Location: " . $url); 重定向页面时可能会发生这种情况。

我有 Comodo 的 PositiveSSL 多域证书。我的服务器是共享网络托管服务上的 Apache,所以我无权访问配置。

我从一个域加载页面,页面内是指向证书上第二个域的链接。

我读到的有关此错误的所有内容似乎都指向此问题与这是一个多域证书有关。

我想知道的是,网页 (php) 编码方面是否有任何可能导致此问题(并且可以修复)的内容,或者是否是配置错误或服务器错误,并且只有我的托管服务可以修理它。

到目前为止,我的托管服务无法提供任何内容,并要求在接下来发生的确切时间回电,以便他们进行研究。任何帮助将不胜感激,因为我并不过分相信他们可以解决这个问题。

更新 好吧,差不多几年后,决定是时候处理它了。通过删除提供图像和 javascript 的静态域,我能够解决大部分问题。但是,我仍在为某些内容使用第二个域,尤其是 Safari 仍然给我带来问题。

我做了更多的研究,并在这里找到了另一篇讨论它的文章。正是@Kevin 所描述的。文章证实它发生在 Safari 中。因此,根据建议,我着手为每个域获取单独的证书。我在共享主机 (Webhostinghub) 上,发现他们现在提供自动续订的免费 SSL (AutoSSL)。这听起来不错。他们为我设置了 5 个免费证书。到现在为止还挺好。我什至可能会尝试重新启用静态域进行测试。如果一切顺利,我将节省 $ 以启动作为奖励,并让我的 Comodo 证书在 7 月到期。

Kev*_*vin 21

这是由以下事件序列引起的:

  1. 服务器和客户端都支持并使用 HTTP/2。
  2. 客户端在 请求页面foo.example.com
  3. 在 TLS 协商期间,服务器提供一个对foo.example.com和都有效的证书bar.example.com(并且客户端接受它)。这可以通过通配符证书或 SAN 证书来完成。
  4. 客户端重用连接来请求bar.example.com
  5. 服务器无法或不愿意支持跨域连接重用(例如,因为您配置了不同的 SSL并且 Apache 想要强制进行 TLS 重新协商),并提供 HTTP 421。
  6. 客户端不会使用新连接自动重试(例如参见Chrome 错误 #546991,现已修复)。在相关的变更请求,表示该客户端可以重试,而不是它必须或者应当。重试失败对用户不是特别友好,但对于调试工具或 HTTP 库来说可能是可取的。

事件#6 不受您的控制,但根据服务器的软件,#5 可能是可以修复的。有关如何以及何时发送 HTTP 421 的更多信息,请参阅服务器的 HTTP/2 文档。或者,您可以为每个域颁发单独的证书,但这会产生更多的管理开销并且可能不值得。您也可以完全关闭 HTTP/2,但这在大多数情况下可能有点过头了。