【问题标题】:When to display "Record Not Found" Page or return HTTP 404?何时显示“未找到记录”页面或返回 HTTP 404?
【发布时间】:2013-07-27 06:12:25
【问题描述】:

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

前置条件

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


Web 应用场景

示例网址: ~/PurchaseOrder/View/1234

  1. 数据库中不存在采购订单记录。
  2. 采购订单记录存在,但由于某些业务需求,用户无权查看。

您如何在以下两个选项之间做出选择:

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

Web 服务 API 场景

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

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

谢谢!

【问题讨论】:

    标签: routing http-status-code-404


    【解决方案1】:

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

    来自HTTP spec

    10.4.4 403 禁止

    服务器理解请求,但拒绝执行。 授权将无济于事,并且不应重复请求。如果 请求方法不是 HEAD 并且服务器希望公开 为什么请求没有被满足,它应该描述原因 对于实体的拒绝。如果服务器不想让 此信息可供客户端使用,状态码 404(不 Found) 可以代替。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多