如果请求URL与正则表达式不匹配,那么正确的状态代码是什么

时间:2017-06-24 13:35:46

标签: http http-status-code-404 httpresponse http-status-code-400 http-response-codes

我正在尝试在REST API中开发错误处理,而我目前正在处理响应代码。我还没有找到适合我的问题的适当答案代码的正确答案。

我在后端代码中有这样管理的路由:

$site->route([
  'route' => '/{id:^[a-z]+$}'
]);

现在假设用户输入的www.example.com/page1regex模式不匹配。什么是正确的回应?我想的是404,找不到页面,但我也认为400响应是正确的,因为它描述了请求有错误。

如果静态网址无效,我已经使用了404,因此这是匹配网址动态部分的问题。

在REST API的情况下,这两个响应代码的使用领域是什么?

1 个答案:

答案 0 :(得分:2)

我认为404更合适。

根据specification400表示:

  

400(错误请求)状态代码表示服务器不能或      由于被认为是某种东西,它不会处理请求      客户端错误。

虽然404表示:

  

404(未找到)状态代码表示源服务器已执行      找不到目标资源的当前表示,或者不是      愿意透露一个存在。

从客户端的角度来看,对/page1的请求将导致错误,因为资源page1不存在(服务器端没有匹配的路由)。

通常,400表示服务器已经定位了资源,但由于客户端错误而无法返回该资源。在这种情况下,如果没有匹配的路由,服务器无法定位资源。无论如何,如果请求被发送到/123456并且状态代码是400,那么错误消息应该是什么? “您请求的网址不正确”听起来像404,“您请求的网址应遵循正则表达式:... ^ [a-z] + $ ...”听起来很奇怪。