通过 node-http-proxy 保留基于 cookie 的会话

2024-05-20

我有一个简单的基于 Express 的 Node.js Web 服务器,用于开发 JavaScript 应用程序。我将服务器设置为使用 node-http-proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API 请求。这个设置一直运行得很好,直到我开始遇到会话管理问题。

身份验证后,应用程序服务器返回一个 cookie,其中包含代表服务器会话的身份验证令牌。当我从文件系统 (file://) 运行 JS 应用程序时,我可以看到,一旦客户端收到 cookie,它就会在所有后续 API 请求中发送。当我在节点服务器上运行 JS 应用程序并且 API 调用通过 node-http-proxy (RoutingProxy) 代理时,请求标头从不包含 cookie。

我是否需要手动处理某些内容才能通过代理支持这种类型的会话持久性?我一直在研究 Node-http-proxy 代码,但这有点超出我的理解范围,因为我是 Node.js 的新手。

https://gist.github.com/2475547 https://gist.github.com/2475547 or:

var express = require('express'),
    routingProxy = require('http-proxy').RoutingProxy(),
    app = express.createServer();

var apiVersion = 1.0,
    apiHost = my.host.com,
    apiPort = 8080;

function apiProxy(pattern, host, port) {
    return function(req, res, next) {
        if (req.url.match(pattern)) {
            routingProxy.proxyRequest(req, res, {host: host, port: port});
        } else {
            next();
        }
    }
}

app.configure(function () {
    // API proxy middleware
    app.use(apiProxy(new RegExp('\/' + apiVersion + '\/.*'), apiHost, apiPort));

    // Static content middleware
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(express.static(__dirname));
    app.use(express.errorHandler({
        dumpExceptions: true, 
        showStack: true
    }));
    app.use(app.router);
});

app.listen(3000);

我通过手动查看响应来完成您所要求的操作,查看它是否是 set-cookie,剪下 JSESSSIONID,将其存储在变量中,并将其作为标头传递给所有后续请求。这样,反向代理就充当了 cookie。

on('proxyReq', function(proxyReq){ proxyReq.setHeader('cookie', 'sessionid=' + cookieSnippedValue) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 node-http-proxy 保留基于 cookie 的会话 的相关文章

随机推荐