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

我正在我的网站中实现一个数据库并了解 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?

    }

}


江户川乱折腾
浏览 65回答 1
1回答

largeQ

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这种事情通常被称为“保护条款”。在您的整体操作开始时,您检查您的先决条件并在必要时失败。如果所有保护子句都通过,则代码可以安全地继续。
打开App,查看更多内容
随时随地看视频慕课网APP