在Http状态代码404上返回附加值的最佳方法

时间:2017-06-26 09:51:09

标签: http api-design

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

例如,不是只返回一个404,它可能会困扰我的客户端路由是否正确,它也会收到类似

的内容
  

标识符'abc'未知

我通常会将内容类型设置为text/plain并返回Content

中的一些文字

另一种方法是改为设置ReasonPhrase

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

2 个答案:

答案 0 :(得分:2)

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

根据RFC 2616

  

Reason-Phrase旨在提供状态代码的简短文字说明......客户无需检查或显示Reason-Phrase。

一些解释:

  1. 原因 - 短语是文字 状态代码的描述,它应该描述状态代码本身,而不是自定义错误消息。如果自定义错误消息很长,或者消息具有JSON结构,则使用Reason-Phrase肯定违反了规范。
  2. 正如规范所示,客户端(浏览器)不需要检查Reason-Phrase,这意味着在某些时候某些浏览器可能会忽略Reason-Phrase。

答案 1 :(得分:0)

您可以使用自定义错误响应并覆盖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