首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用node-http-proxy重写响应头

使用node-http-proxy重写响应头
EN

Stack Overflow用户
提问于 2012-10-06 09:15:08
回答 3查看 21.4K关注 0票数 18

我正在使用node-http-proxy,并希望观察特定的响应头,并在必要时重写它。这里有人对此有什么建议吗?

我的代理服务器位于两个不同的节点服务器和一个java webapp的前面。java应用程序正在设置cookie,但是cookie有一个相对于webapp上下文的路径。我需要cookie是安全的,并且在不修改Java应用程序的情况下有到根目录的路径。

换句话说,返回如下头部:

代码语言:javascript
复制
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly

我想将路径值重写为:

代码语言:javascript
复制
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure

我不清楚如何使用node-http-proxy来做这件事。有什么建议吗?有没有中间件能帮上忙呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-23 22:13:34

这可以通过重载response对象的writeHead函数来实现。例如,此代码将'foo‘响应头设置为值'bar’。我已经指出了在哪里可以添加您自己的逻辑来更改头文件的值。

JavaScript不是我的主要语言,因此可能有一种更常用的方法来重载writeHead方法。

代码语言:javascript
复制
httpProxy = require('http-proxy');

httpProxy.createServer(function (req, res, proxy) {

  res.oldWriteHead = res.writeHead;
  res.writeHead = function(statusCode, headers) {
    /* add logic to change headers here */
    var contentType = res.getHeader('content-type');
    res.setHeader('content-type', 'text/plain');

    // old way: might not work now
    // as headers param is not always provided
    // https://github.com/nodejitsu/node-http-proxy/pull/260/files
    // headers['foo'] = 'bar';       

    res.oldWriteHead(statusCode, headers);
  }

  proxy.proxyRequest(req, res, {
    host: 'localhost',
    port: 3000
  });
}).listen(8000);
票数 26
EN

Stack Overflow用户

发布于 2021-03-12 13:39:56

只要听一听proxyRes事件,然后把你的逻辑。

代码语言:javascript
复制
proxy.on('proxyRes', (proxyRes, req, res) => {
    // modifying headers goes here
});

请参阅https://www.npmjs.com/package/http-proxy#listening-for-proxy-events

票数 0
EN

Stack Overflow用户

发布于 2012-10-07 19:23:21

我没有测试这段代码,但它应该允许您在发送请求之前编辑您的头文件。如果它起作用了,请告诉我。

代码语言:javascript
复制
var httpProxy = require('http-proxy');

var server = httpProxy.createServer(function (req, res, proxy) {
  var buffer = httpProxy.buffer(req);
  req.headers['x-host'] = process.env.PROXY_URI;
  proxy.proxyRequest(req, res, {
    host: '127.0.0.1',
    port: 9000,
  });
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12755865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档