运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

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

运维开发网 https://www.qedev.com 2020-06-15 10:33 出处:网络 作者:运维开发网整理
我相信人们对此有很多不同的看法. 我想知道其他开发人员如何考虑处理这种情况. 前提 Web应用程序/服务需要身份验证(即,用户需要登录). 它不公开. Web应用程序方案 示例URL:〜/ PurchaseOrder / View / 1234 >数据库中不存在采购订单记录. >存在采购订单记录,但由于某些业务要求,用户无权查看. 您如何决定以下两个选项: >使用HTTP 200显示未找到的采购订
我相信人们对此有很多不同的看法.

我想知道其他开发人员如何考虑处理这种情况.

前提

Web应用程序/服务需要身份验证(即,用户需要登录).

它不公开.

Web应用程序方案

示例URL:〜/ PurchaseOrder / View / 1234

>数据库中不存在采购订单记录.

>存在采购订单记录,但由于某些业务要求,用户无权查看.

您如何决定以下两个选项:

>使用HTTP 200显示未找到的采购订单网页.

>将响应状态设置为HTTP 404 Not Found并重定向到通用404错误页面.

Web服务API方案

假设可以从JSON格式的Web服务检索Purchase Order记录.

显然,如果记录不存在,API将返回HTTP 404.

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

谢谢!

对于REST Web服务API,如果未找到记录,则返回404.

如果用户没有权限,如果您想知道该记录存在但用户没有权限,则返回403“Forbidden”.如果您不希望在用户无权查看该记录时披露该记录存在这一事实,请返回404.

从HTTP spec:

10.4.4 403 Forbidden

The server understood the request, but is refusing to fulfill it.

Authorization will not help and the request SHOULD NOT be repeated. If

the request method was not HEAD and the server wishes to make public

why the request has not been fulfilled, it SHOULD describe the reason

for the refusal in the entity. If the server does not wish to make

this information available to the client, the status code 404 (Not

Found) can be used instead.

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

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消