在数据库驱动的Web应用程序中,当数据库不可用时,用户应该看到什么?

时间:2009-11-04 04:26:11

标签: web-applications http-status-code-404 data-driven

如果Web应用程序依赖于数据库来提供动态内容,并且该内容因任何原因(数据库服务器关闭等)不可用,那么处理此方案的首选方法是什么?

  1. 将访问者重定向到自定义404页面?
  2. 仍然显示页面,但包含某种错误消息,否则内容会是什么?
  3. 显示包含静态内容的相关页面?
  4. 其他?
  5. 我知道应该进行正确的错误记录,并通知网站管理员和/或系统管理员。我最感兴趣的是最终用户在这种情况下应该看到的最佳实践。

4 个答案:

答案 0 :(得分:4)

#3如果可以的话(例如,每20分钟拍摄一次动态内容的快照),但要清楚地知道它的静态内容是< time>并在系统问题得到解决后立即刷新。

#2如果你不能,只要错误是人类可读的,而不是从Java或某些文件重新打印异常的堆栈跟踪。

答案 1 :(得分:4)

无论您做什么,不要返回404 - 您的应用可能无法正常运行,但您不希望给人的印象是网址不正确。除此之外,这可能会对您网站的搜索引擎优化产生负面影响。

如果您要返回200以外的某些HTTP状态,那么我建议使用503“服务不可用”响应。这更多地表明了应用程序的临时错误,而不是HTTP请求的错误。

答案 2 :(得分:3)

我认为这取决于整个页面内容与数据库的关联程度。例如,在我们的网络应用程序中,如果数据库已关闭,那么就没有身份验证方法;我们唯一的假设是一个自定义错误屏幕,以解决'我们现在遇到问题;稍后再来一次'。

现在;如果动态内容类似于在大多数静态文件之上的当天的引用,则代替内容的简单错误消息;或者遗漏动态内容都是合适的。

因此;它取决于页面提供的服务,以及它是否可以在没有后端的情况下提供任何有用的功能。

答案 3 :(得分:1)

我认为#3可能是最好的,但并不总是可行的。如果那是不可能的,某种“技术困难,请待命......”可能是最好的(显然,你可以把措辞改成更好的东西)。只是避免实际打印ERROR:ERR_123 / SIGSEGV! (或类似的东西)用大红色字母。它会让用户认为您的应用已损坏且可能无法恢复。