何时显示“未找到记录”页面或返回HTTP 404?

时间:2013-07-26 20:23:40

标签: routing http-status-code-404

我相信人们对此有很多不同的看法 我想知道其他开发人员如何考虑处理这种情况。

前提条件

Web应用程序/服务需要身份验证(即,用户需要登录) 它不公开。


Web应用程序方案

示例网址 ~/PurchaseOrder/View/1234

  1. 数据库中不存在采购订单记录。
  2. 存在采购订单记录,但由于某些业务要求,用户无权查看。
  3. 您如何决定以下两个选项:

    • 使用HTTP 200显示未找到的采购订单网页。
    • 将响应状态设置为HTTP 404 Not Found并重定向到通用404错误页面。

    Web服务API方案

    可以说,采购订单记录可以从JSON格式的Web服务中检索 显然,如果记录不存在,API将返回HTTP 404。

    但是当用户没有查看特定采购订单记录的权限时,它应该如何响应?将响应代码设置为404并在JSON中返回错误消息

    谢谢!

1 个答案:

答案 0 :(得分:6)

对于REST Web服务API,如果找不到记录,则返回404。 如果用户没有权限,如果您想知道该记录存在但用户没有权限,则返回403“Forbidden”。如果您不希望在用户无权查看该记录时披露该记录的事实,请返回404.

来自HTTP spec

  

10.4.4 403禁止

     

服务器理解请求,但拒绝履行请求。   授权无效,请求不应重复。如果   请求方法不是HEAD,服务器希望公开   为什么请求没有得到满足,它应该描述原因   因为该实体的拒绝。如果服务器不想做   此信息可供客户使用,状态代码404(不是   找到了)可以代替使用。

对于Web应用程序场景,在出现错误的情况下返回404(或403)以及响应正文中的友好错误页面可能在技术上更正确,但返回200可能会导致更好用户体验,具体取决于您的受众群体使用的浏览器。 (我听说有些旧版浏览器忽略了4xx错误的自定义错误页面,而是显示了自己的内部错误页面,而它们总是显示200响应的内容。现代浏览器不应该有这个问题。)