You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js的https库获取Spring Boot 2响应的HTTPS头

如何用Node.js的https库获取响应头 & 排查获取不到的问题

首先来说第一个问题:怎么获取响应头

在https.request的回调函数里,传入的res(响应对象)自带headers属性,这是一个包含所有响应头的键值对对象。而且响应头是在响应最开始就返回的,你完全不需要等到data事件触发,在回调函数启动的第一时间就能访问到它。

给你修改下你的代码示例,演示怎么获取和返回响应头:

var options = { 
  hostname: hostname, 
  port: port, 
  path: pathMethod, 
  method: method, 
  headers: { 
    'Content-Type': APPLICATION_JSON, 
    'Authorization': BEARER + localStorage.jwtToken 
  }, 
  rejectUnauthorized: false, 
  agent: false, 
  requestCert: false 
}; 

return new Promise(function(resolve, reject) { 
  var req = https.request(options, function(res) {
    // 在这里直接就能拿到所有响应头
    const responseHeaders = res.headers;
    console.log('完整响应头:', responseHeaders);
    // 获取特定头,注意Node会把所有头字段名转为小写
    console.log('Content-Type:', responseHeaders['content-type']);
    // 如果是自定义头,比如X-Request-ID,也要用小写键名
    console.log('自定义请求ID:', responseHeaders['x-request-id']);

    res.setEncoding(ENCODING_UTF8); 
    res.on('data', function(result) { 
      try { 
        const obj = JSON.parse(result); 
        resolve({ 
          'httpStatus': PAGE_STATUS_200, 
          'result': obj,
          'headers': responseHeaders // 把响应头也纳入返回结果
        }); 
      } catch(error) { 
        console.error(error); 
        // 这里注意你原来的代码多嵌套了一层resolve,要修正
        resolve({ 'httpStatus': PAGE_STATUS_500 }); 
      } 
    }); 
    res.on('end', () => { 
      console.log('No more data in response.'); 
    }); 
  }); 

  req.on('error', function(err) { 
    console.log(`problem with request: ${err.message}`); 
    reject(err); 
  }); 

  if (postData) { 
    req.write(postData); 
  } 
  req.end(); 
}); 

接下来解决第二个问题:为什么浏览器能看到的响应头,Node里拿不到?

这里有几个常见的排查方向:

  • 字段名大小写问题:Node会自动把所有响应头的字段名转为小写,而浏览器开发者工具里显示的是原始大小写(比如X-Custom-Header)。如果你在Node里用大写的字段名去访问(比如res.headers['X-Custom-Header']),就会拿不到值,必须用小写的res.headers['x-custom-header']。

  • 请求差异导致服务器返回不同头:你浏览器的请求和Node代码里的请求可能存在细节差异——比如User-Agent、Cookie、额外的请求头不同,导致服务器返回的响应头不一样。你可以对比两者的请求头(比如Node里的options.headers和浏览器Network面板里的请求头),调整Node的请求头和浏览器保持一致再测试。

  • 错误的访问时机:如果你在https.request的回调函数外部(比如请求发送后但响应还没回来时)去访问res.headers,自然拿不到值。一定要在回调函数内部,也就是res对象已经初始化完成后再访问。

内容的提问来源于stack exchange,提问作者alexis_dia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:09