当用户尝试登录时,在不检查数据库的情况下 return 401 HTTP 状态代码是否合适?

Is it appropriate to return a 401 HTTP Status Code without checking the database, when a user tries to login?

有些应用程序有注册验证规则,例如

Password must have at least 8 characters with one number, a special character.....

Your username cannot be longer than 15 characters

例如,如果应用程序有一个 username/email 字段和密码字段用于登录,并且用户不符合应用程序的验证规则,是否可以 return a 401 HTTP 状态代码,没有检查数据库以查看凭据是否匹配?

在我看来,主要的好处是您不会进行不必要的数据库检查,因为您知道数据无论如何都不会有效。但是,这对我来说仍然感觉不对,就好像存在漏洞(我不能完全确定任何漏洞)或违反了某些规则。

在不进行数据库调用的情况下 return 发送 401 的另一个可能问题是,如果应用程序的验证规则发生变化,那么曾经无效的 username/password 可能会变为有效。然而,这并不是某些单元测试无法帮助检测的。

综上所述,当用户尝试登录时,return 401 HTTP 状态代码而不检查数据库是否合适?

从 HTTP 协议的角度来看,为什么密码不正确完全无关紧要。服务器可以做最适合检查的事情。