【问题标题】:Why do axios calls via nodejs scripts include Content-Length Header while browser requests don't?为什么通过 nodejs 脚本调用 axios 包含 Content-Length Header 而浏览器请求不包含?
【发布时间】:2018-02-07 23:00:57
【问题描述】:

我将 HEAD 和 GET 都发送到资源以找出大小(压缩和未压缩的 gzip)。

我发现当通过这样的nodejs脚本运行axios时:

var axios = require('axios');

axios.head('<URL_TO_RESOURCE>')
  .then(function (response) {
    console.log(response.headers['content-length']);
  })
  .catch(function (error) {
    console.log(error.request.res.statusCode);
    console.log(error.request.res.headers['content-length']);
  });

我收到 Content-Length 标头(也带有 axios.get)。

但是,在浏览器上运行类似调用(通过 axios CDN 脚本导入)时,缺少此标头。

为什么会这样?有没有办法在浏览器中获取该标题?

我在request 和其他库中也注意到了这个问题。

【问题讨论】:

    标签: javascript node.js request http-headers axios


    【解决方案1】:

    在服务器端添加响应头 Access-Control-Expose-Headers:Content-Length 就可以了。

    浏览器实际上剥离了该标头,这就是为什么 node.js 脚本可以工作,而前端 javascript 却没有的原因。此外,此问题与 axios 或任何其他请求库无关。

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多