5

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

前提

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


网络应用场景

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

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

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

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

Web 服务 API 场景

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

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

谢谢!

4

1 回答 1

9

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

HTTP 规范

10.4.4 403 禁止

服务器理解请求,但拒绝执行。授权将无济于事,并且不应重复请求。如果请求方法不是 HEAD 并且服务器希望公开请求未完成的原因,它应该在实体中描述拒绝的原因。如果服务器不希望向客户端提供此信息,则可以使用状态代码 404(未找到)来代替。

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

于 2013-07-26T20:56:43.833 回答