【问题标题】:Should server return error page or render form again on 400 Bad Request服务器是否应该在 400 Bad Request 上返回错误页面或再次呈现表单
【发布时间】:2021-05-26 12:43:36
【问题描述】:

我有一个带有页面和表单的基本网络应用程序(不是 api)。如果用户发送例如使用无法验证的值注册表单,我再次使用 status 422 呈现表单页面,指示错误输入的位置。

当语法格式错误时,是否应该向用户显示错误页面并显示代码 400 Bad request,或者是否应该再次呈现注册表单页面并显示请求正文格式错误的消息(响应仍然是 400)?

我的想法: 错误页面的参数:如果前端(客户端)在没有或带有错误正文的情况下发送 POST 请求,似乎有问题。要么必须修复前端,要么操纵请求正文。如果用户正常发送表单并且前端没有故障,则永远不会发生这种情况。

*我为什么怀疑:我不能 100% 确定它不可能是客户端的临时错误,也可能是网络问题或其他原因。如果这是合理的,则必须再次将用户重定向到表单,并提供请求正文错误的信息。他应该可以再试一次。 我的相关问题基本上是这样的:在正常的操作流程中,服务器是否有可能收到带有错误正文的请求?

【问题讨论】:

    标签: php http error-handling http-status-code-400


    【解决方案1】:

    尝试将应用程序的每个部分“深度”映射到 HTTP 状态代码是错误的;在大多数情况下,您要瞄准的粒度级别要粗得多。如有疑问,可以在没有更合适的情况下使用通用状态代码 200 OK、400 Bad Request 和 500 Internal Service Error。

    422 vs 400 细化,这些代码通常是针对开发人员而不是最终用户的(除非您的最终用户是开发人员)。这可以帮助您查看日志并找出到底发生了什么。如果表单上有错误,我只会为用户呈现一条验证消息,表明出现问题,或者您可以通过验证了解更多详细信息。

    您可以使用像 Sentry 这样的工具来提供实际错误的堆栈跟踪。

    【讨论】:

    • 感谢您的回复,但我的问题根本不是关于 422 与 400 的问题。我说的是格式错误的正文语法(不是来自用户的错误输入)。我的问题之前的问题是:在正常的操作流程中,服务器是否有可能收到带有格式错误的正文语法的请求?就像不时“可能发生”的错误(然后我会渲染表单)还是总是意味着有问题(然后我会渲染错误页面以便用户报告错误)
    • 哦,我的错,明白了,这肯定会发生,例如,如果您尝试创建一个条目,数据库中有唯一索引。例如,电子邮件已经存在,它应该返回 400/422 请求,因为它无法处理它。此外,例如,如果您在字段上强制执行规则集(即强制验证后端消息中可能不存在链接),它应该抛出 400/422。它可以发生是的。您应该重定向到错误报告页面吗?如果您的表单没有限制或验证,它不应该抛出这些错误...
    • 是的,对于各种验证错误(名称太短、电子邮件无效等),我返回 422 并告诉用户他在哪里犯了哪个错误。例如,当我期望正文中有参数“电子邮件”但没有给出时,格式错误的正文语法就是这样。验证错误:“email:$dfdf@$$.com”语法错误:“emai:anything@test.com”或“em:email@adsf.com”或什么都没有
    • 如果您遵循以下步骤,您可以观察到这一点:stackoverflow.com/a/59871612/9013718 和 w3 如果不是值而是“键”或“参数”或 idk 如何调用它们无效,则希望返回 400为服务器。服务器无法“理解”请求,因为它不包含评估内容所需的密钥。
    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2013-04-20
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多