【问题标题】:HTTP health check - GET or HEAD and 200 or 204 response?HTTP 健康检查 - GET 或 HEAD 以及 200 或 204 响应?
【发布时间】:2020-12-11 21:55:10
【问题描述】:

我想知道是否有一个通用约定:当您对任何响应正文不感兴趣而只对状态代码感兴趣的任何给定应用程序实施 HTTP 健康检查时,默认/预期端点会是什么样子?

  • 使用 HEAD 请求 - 并返回 200 或 204 状态代码(其中哪一个?)
  • 使用 GET 和 204
  • 还有别的吗?

【问题讨论】:

  • 你应该阅读 OPTIONS 规范:tools.ietf.org/html/rfc7231#section-4.3.7
  • 在我看来,可以使用 GET 或 HEAD 进行健康检查,不存在通用约定。如果我必须在 GET 或 HEAD 之间进行选择,我会选择 HEAD,因为对于服务器和客户端来说更快更轻。

标签: http http-status-codes health-monitoring health-check


【解决方案1】:

根据我的经验,人们主要使用 GET 和 200。健康检查不会响应太多内容,因此没有必要发出 HEAD 请求。但这主要是使用专用的运行状况检查 URL。

当今的云系统通常使用 Kubernetes 或 OpenShift。他们似乎使用了GET 请求。我认为他们可能想要获得200ish 响应代码,所以200-299

https://docs.openshift.com/enterprise/3.0/dev_guide/application_health.html

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

另一个例子,Drupal 将 HTTP 响应代码定义为200

https://www.drupal.org/project/health_check_url

在 Oracle 的基础架构即服务文档中,您可以在 GETHEAD 请求之间进行选择,但默认为 HEAD

https://docs.oracle.com/en-us/iaas/api/#/en/healthchecks/20180501/HttpMonitor/

【讨论】:

    【解决方案2】:

    使用带有 204 的 GET 可能还支持具有相同状态代码的 HEAD

    HEAD 应该给出与 GET 相同的响应,但没有响应正文,因此您应该首先了解/定义 GET 响应在标头(和状态代码)方面给出的内容,然后,如果您愿意,您可以还支持同一端点上的 HEAD,返回相同的状态,在本例中为 204。

    请注意,如果 GET employee/34 anwswers 使用 404 也 HEAD 必须使用相同的代码。这意味着必须做与GET 相同的工作:检查员工是否存在、设置状态等,但不得写任何回复。 Tomcat 自动支持这一点,因为它用于 HEAD 请求一个从不写入“真实”响应的响应对象,因此可以使用相同的代码处理 GET

    也可以考虑进行检查TRACE,但它会产生一个响应正文/输出反映您发送给它的内容,不同的是,我还没有看到在任何地方实现。

    TRACE 允许客户端查看对方收到的内容 请求链的末端并将该数据用于测试或诊断 信息。

    【讨论】:

    • 谢谢,您很好地解释了何时使用 GET 与 HEAD。但是,您是否也能绕开我关于健康检查端点使用什么的问题的核心?
    猜你喜欢
    • 2016-06-18
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2016-10-16
    • 2021-05-09
    相关资源
    最近更新 更多