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

问题描述 投票:0回答:1

我正在将数据库安装到我的网站中,并了解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?
    }
}
php httpresponse http-status-codes
1个回答
1
投票

这里使用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

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

© www.soinside.com 2019 - 2024. All rights reserved.