【发布时间】:2021-09-20 07:57:32
【问题描述】:
当我需要检查 HTTP 资源是否可用(返回 HTTP 200)但我不想下载响应正文时,我有一个用例,因为它可能很大并且我的每月传输受到限制。
在 C# HttpClient 中有一个选项 HttpRequestOptions.ResponseHeadersRead = 1 可以做到这一点。
我想知道这是否可以在 NodeJS 中完成,最好使用 axios 库?我唯一的想法是设置maxContentLength:
axios({
method: 'GET',
url: 'https://<any-url>/',
maxContentLength: 1000,
})
– 但我不喜欢这个想法,因为它是一种 hack 并且在语义上是错误的,并且调整 maxContentLength 参数的大小可能会导致常规 HTTP 404 最终导致内容过大 - 我的代码会错误地假定资源可用但太大了。
【问题讨论】:
-
目标服务器是否支持HEAD method?这就是它的设计目的。如果不是,并且您正在使用一个 http 请求库,它可以让您获得更低的级别,您可以读取标头,然后在读取正文之前断开连接。这将是一个 hack,因为服务器将尝试发送正文,并且可能会过早地看到连接断开(可能会记录连接错误)。而且,即使您没有在应用程序中读取它,某些数据仍可能会发送到操作系统接收缓冲区。