【问题标题】:Best way to return added value on Http Status Code 404在 Http Status Code 404 上返回附加值的最佳方法
【发布时间】:2017-06-26 09:51:09
【问题描述】:

有时我会在服务器级别返回一些额外信息以及HTTP 404

例如,不是只返回一个404,这会让我的客户困惑路由是否正确,它还会收到类似的东西

标识符“abc”未知

我通常将内容类型设置为text/plain,并在Content中返回一些文本

另一种选择是设置ReasonPhrase

哪一个是最好的方式/约定?设置Content或设置ReasonPhrase

【问题讨论】:

    标签: http api-design


    【解决方案1】:

    错误消息应该放在响应正文中(Content),而不是响应Reason Phrase

    根据RFC 2616

    原因短语旨在提供状态码的简短文本描述...客户端不需要检查或显示原因短语。

    一些解释:

    1. Reason-Phrase 是 shorttextual 描述 Status-Code,它应该描述 Status Code 本身,而不是自定义错误消息。如果自定义错误消息很长,或者消息是 JSON 结构,使用 Reason-Phrase 肯定违反规范。
    2. 如规范所示,客户端(浏览器)不需要检查原因短语,这意味着某些浏览器可能会在一段时间内忽略原因短语。

    【讨论】:

    • a) RFC 2616 已过时,请参阅 RFC 723* b) 说,原因短语在 HTTP/2 中不存在
    【解决方案2】:

    您可以使用自定义错误响应并覆盖 404 和您想要的任何其他错误 访问这里 Spring MVC: How to return custom 404 errorpages?

    创建一个视图并在 app/Exception/Handler.php 中设置此代码:

    /*将异常渲染到响应中。 * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response

    */

    公共函数渲染($request, Exception $e)

    {

    if($e instanceof NotFoundHttpException)
    
    {
    
        return response()->view('missing', [], 404);
    
    }
    
    return parent::render($request, $e);
    

    }

    设置此用途以使其正常工作:

    使用 Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

    欲了解更多信息,您可以访问

    https://httpd.apache.org/docs/2.4/custom-error.html

    https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/deploying-web-site-projects/displaying-a-custom-error-page-cs

    【讨论】:

    • 我的问题不是我们如何做到这一点,而是这样做是否真的是个好主意。
    • 不,这不是一个好主意,因为如果客户端在 404 上执行任何特定操作,则必须更改其代码使其与您的代码兼容,否则他们可能不知道该怎么做。有时遵循标准很好......我不建议这样做。
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2013-08-16
    • 2020-09-03
    • 2020-09-29
    相关资源
    最近更新 更多