为了账号安全,请及时绑定邮箱和手机立即绑定

未找到的数据库服务器文件的正确状态代码?

未找到的数据库服务器文件的正确状态代码?

PHP
江户川乱折腾 2022-10-28 14:56:13
我正在我的网站中实现一个数据库并了解 http 状态代码。我正在尝试为请求可能引起的任何问题实施解决方案,并且我考虑在连接到数据库以更新或查询它时,如果服务器端不存在该文件,正确的状态代码是什么(它可能已被暂时删除以停止传输任何数据?)。我将向用户实施自定义消息以通知他们,但想知道此响应的“正确”状态代码是什么?我已将其缩小到 404(未找到文件)或 503(服务不可用)或其他我不知道的?PHP代码如果有帮助try {    if (!file_exists("dbConn.php")) {        throw new Exception("File Not Found");    } else {        require_once("dbConn.php");        $dbConn = getConnection();    }    // other code} catch (Exception $e) {    if ($e->getMessage() == "Bad Request") {        http_response_code(400); // This is for an exception thrown in 'other code' (not displayed)    } else {        // http_response_code(404) or http_response_code(503) or other?    }}
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

5xx 状态码在这里是合适的。503 或 500 似乎都是合理的,具体取决于您认为此特定错误的预期与意外。


404 表示用户请求的资源不存在。他们在这种情况下吗?一些支持的后端服务可能不存在或可能失败,但这不是用户关心的问题。HTTP 状态码指的是 HTTP 资源,而不是您的后端基础设施。并且用户请求了正确的资源。


当返回任何 4xx 状态码时,问问自己:


用户可以做些什么来修改他们的请求以纠正问题?


如果答案是否定的,那么这不是客户端错误,而是服务器错误。这将问题置于 5xx 领域。


顺便说一句,这看起来像是对异常的不良使用:


if (!file_exists("dbConn.php")) {

    throw new Exception("File Not Found");

} else {

    //...

}

这基本上是在控制流中使用异常,这就是if本来的用途。您已经确定if您要查找的文件不可用。在该if块中,您可以制作您的响应并结束脚本的执行。


所以可能是这样的:


if (!file_exists("dbConn.php")) {

    http_response_code(500);

    die 'Unable to process the request.';

}

// No need for an "else" here, just continue as normal

这种事情通常被称为“保护条款”。在您的整体操作开始时,您检查您的先决条件并在必要时失败。如果所有保护子句都通过,则代码可以安全地继续。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信