HTTP 运行状况检查 - GET 或 HEAD 以及 200 或 204 响应?

HTTP health check - GET or HEAD and 200 or 204 response?

我想知道是否有一个通用的约定:当对任何给定的应用程序实施 HTTP 健康检查时,您对任何响应主体不感兴趣,只对状态代码感兴趣,default/expected端点是什么样的?

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

A HEAD 应该给出与 GET 相同的响应但没有响应 body,因此您应该首先 know/define GET 响应根据 headers 给出的内容(和状态代码),然后,如果需要,您还可以在同一端点上支持 HEAD,返回相同的状态,在本例中为 204。

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

对于支票,人们也可以考虑 TRACE 但它会产生一个响应 body / 输出镜像你发送给它的内容,这是不同的,我还没有在任何地方看到实现。

TRACE allows the client to see what is being received at the other end of the request chain and use that data for testing or diagnostic information.

根据我的经验,人们主要使用 GET 和 200。健康检查不会响应太多内容,因此无需发出 HEAD 请求。但这主要是专门的健康检查 URL.

当今的云系统通常使用 Kubernetes 或 OpenShift。他们似乎使用 GET 请求。我想他们可能想要一个 200 左右的响应代码,所以 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/