Routing 何时显示";“未找到记录”;页面还是返回HTTP 404?

Routing 何时显示";“未找到记录”;页面还是返回HTTP 404?,routing,http-status-code-404,Routing,Http Status Code 404,我相信人们对此有很多不同的看法。 我想知道其他开发人员如何考虑处理这个场景 前提条件 web应用程序/服务需要身份验证(即用户需要登录)。 它不能公开访问 Web应用程序场景 示例URL:~/PurchaseOrder/View/1234 数据库中不存在采购订单记录 采购订单记录存在,但由于某些业务需求,用户没有查看权限 您如何在以下两个选项之间做出选择: 使用HTTP 200显示未找到采购订单网页 将响应状态设置为HTTP 404 Not Found,并重定向到一般404错误页面 We

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

前提条件 web应用程序/服务需要身份验证(即用户需要登录)。
它不能公开访问


Web应用程序场景 示例URL:
~/PurchaseOrder/View/1234

  • 数据库中不存在采购订单记录
  • 采购订单记录存在,但由于某些业务需求,用户没有查看权限 您如何在以下两个选项之间做出选择:

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

    Web服务API场景 假设可以从JSON格式的web服务中检索采购订单记录。
    显然,如果记录不存在,API将返回HTTP404

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


    谢谢

    对于RESTWeb服务API,如果未找到记录,则返回404。 如果用户没有权限,如果您想知道记录存在但用户没有权限,请返回403“禁止”。如果不想在用户没有查看权限时披露记录存在的事实,则返回404

    从:

    10.4.4 403禁止

    服务器理解该请求,但拒绝满足该请求。 授权没有帮助,请求不应重复。如果 请求方法不是HEAD,服务器希望公开 为什么请求未得到满足,应说明原因 对于实体中的拒绝。如果服务器不希望 此信息可供客户端使用,状态代码为404(不适用) 找到)可以改为使用

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