我有一个测试域名,例如:https:www.test.com,最近我将我的服务器移至新的服务器,托管在 liquid-web 上。将此测试帐户转移到新服务器并指向后,只有这个域名开始抛出错误 HTTP 错误 431,其中一些域名显示空白屏幕。我已为此站点设置密码验证。
当我在私人窗口中打开它或清除缓存后,它工作正常。这个问题现在停止了所有的服务器迁移,因为我们担心这可能会影响我们数量庞大的回头客。
这是我得到的屏幕截图。尝试删除 htaccess,只将 index.html 放在根目录中,降低 TTL 值,尝试通过标头中的元标记进行无缓存,但没有任何帮助。
有谁知道什么是 HTTP 错误 431
答案1
升级到 HTTP 2 后,我们遇到了同样的问题。这是由于设置的 cookie 过多造成的。棘手的是,此错误不是由标头字段大小引起的(在 Apache 中,HTTP 1 和 2 都是相同的)。这是由大量标头字段引起的。HTTP 1 似乎将所有 cookie 一起计为一个标头,但 HTTP2 将每个 cookie 计为一个标头。升级后限制请求字段从100到1000的问题消失了。
这是 HTTP 2 规范中的原因:
为了实现更好的压缩效率,Cookie 标头字段可以拆分为单独的标头字段,每个标头字段包含一个或多个 cookie 对。
这意味着在 HTTP 1 中,cookie 始终只有一个字段。在 HTTP 2 中,cookie 可能被拆分成多个字段。这就是只有部分浏览器会出现问题的根本原因。
答案2
在几次用头撞桌子之后,我发现问题出在我创建了大量 cookie 以保存客户访客产品 ID,这导致了 HTTP 2.0 出现问题。我重写了 cookie 以仅使用小空间,现在它工作正常。
即使我缩小了 cookie 网站并将新代码上传到新大小,网站仍然无法正常工作。它根本无法访问该网站,我不得不将新服务器 HTTP 2.0 降级为 HTTP 1.2运行良好。一旦我们减少网站中的 cookie 大小,我们就升级到 HTTP 2.0,它就会在新服务器中修复该问题。
但仍然不确定是什么引发了 HTTP 2.0 中的问题。