我想知道是否有一个通用约定:在为任何给定应用程序实施 HTTP 健康检查时,您对任何响应正文不感兴趣,而只对状态代码感兴趣,默认/预期端点会是什么样子?
- 使用 HEAD 请求 - 并返回 200 或 204 状态码(其中哪一个?)
- 使用带有 204 的 GET
- 别的东西?
我想知道是否有一个通用约定:在为任何给定应用程序实施 HTTP 健康检查时,您对任何响应正文不感兴趣,而只对状态代码感兴趣,默认/预期端点会是什么样子?
使用带有 204 的 GET 可能还支持具有相同状态代码的 HEAD
HEAD应该给出与 GET 相同的响应,但没有响应正文,因此您应该首先了解/定义 GET 响应在标头(和状态代码)方面给出的内容,然后,如果您愿意,您还可以支持 HEAD相同的端点,返回相同的状态,在本例中为 204。
请注意,如果GET
employee/34
回答 404 也HEAD
必须回答相同的代码。这意味着必须做与 for 相同的工作GET
:检查员工是否存在,设置状态等,但不能写任何响应。Tomcat 自动支持这一点,因为它用于HEAD
请求一个从不写入“真实”响应的响应对象,因此可以使用相同的代码处理GET
对于检查,人们也可以考虑TRACE,但它会产生一个响应主体/输出反映您发送给它的内容,这是不同的,我还没有看到在任何地方实现。
TRACE 允许客户端查看在请求链的另一端接收到的内容,并将该数据用于测试或诊断信息。
根据我的经验,人们主要使用 GET 和 200。健康检查不会响应太多内容,因此没有必要发出 HEAD 请求。但这主要是使用专用健康检查 URL 的情况。
今天的云系统通常使用 Kubernetes 或 OpenShift。他们似乎使用了一个GET
请求。我认为他们可能想要获得一个200
ish 响应代码,所以200-299
:
https://docs.openshift.com/enterprise/3.0/dev_guide/application_health.html
另一个例子,Drupal 将 HTTP 响应代码定义为200
:
https://www.drupal.org/project/health_check_url
在 Oracle 的基础设施即服务文档中,您可以在GET
和HEAD
请求之间进行选择,但默认值为HEAD
:
https://docs.oracle.com/en-us/iaas/api/#/en/healthchecks/20180501/HttpMonitor/