我正在将数据库安装到我的网站中,并了解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?
}
}
这里使用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
这种事情通常被称为“保护条款”。在总体操作开始时,您检查先决条件,并在必要时失败。如果所有保护条款都通过,则可以安全地继续执行代码。