如何避免从 ExpressJS 抛出 400 错误

How to Avoid throwing 400 errors from ExpressJS

背景: 我从我网站上的格式错误的 cookie(来自我的附属页面之一)收到 400 个错误(和一个空白的 400 页响应)。我已经编写了删除 cookie 的代码,但我的一些客户仍然收到错误消息,因为它在他们的缓存中。一旦他们清除缓存,问题就解决了。

这个问题在我的 .NET 代码库中通过简单地忽略 400 错误一起被规避,我想在 Express JS 中做同样的事情。

提问: 我希望在 400 错误(通常由有缺陷的 cookie 引起)时明确忽略所有 cookie,或者至少忽略所有错误。有什么办法吗?

我的ClearDefectiveCookies函数供参考(正常运行)

const clearDefectiveCookies = (req, res, next) => {
  const cookies = req.cookies;
  const defectiveCookies = Object.keys(cookies).filter(key => typeof cookies[key] === 'string' && (cookies[key].charAt(0) === '='));

  if (defectiveCookies.length > 0) {
    defectiveCookies.forEach(defectiveCookie => {
      res.clearCookie(defectiveCookie);
    });
  }

  next();
};

有问题的 Cookie 供参考

名称:xyz_123 和值:=NaN=xyz=123

可能是你调用的方式有问题res.clearCookie。如果您查看 documentation,它会显示:

Web browsers and other compliant clients will only clear the cookie if the given options is identical to those given to res.cookie(), excluding expires and maxAge.

因此,为了清除 cookie,您必须提供第二个参数作为对象,提供路径。

所以答案实际上是节点在 2018 年 11 月发生了重大变化,问题不是 cookie,而是节点的最大 cookie 大小导致了 400 错误。它实际上不是表达..

在这里查看答案: