【问题标题】:Is it possible to fetch HTTP headers only and do not download the content body with Axios in NodeJS?是否可以仅获取 HTTP 标头而不使用 NodeJS 中的 Axios 下载内容正文?
【发布时间】: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,因为服务器将尝试发送正文,并且可能会过早地看到连接断开(可能会记录连接错误)。而且,即使您没有在应用程序中读取它,某些数据仍可能会发送到操作系统接收缓冲区。

标签: node.js http axios


【解决方案1】:

var apiUrl = 'https://api.domain.com/v1/products/'

axios.head(apiUrl)
  .then((data) => {
  console.log('data', data.status)
})
  .catch((e) => {
  console.log('error', e)
})

您可以使用 HEAD 请求代替 GET 请求,您将获得必要的状态码,其中包含内容长度、内容类型的标头信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2020-08-17
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多