gpt4 book ai didi

javascript - 通过 node-http-proxy 持久化基于 cookie 的 session

转载 作者:IT老高 更新时间:2023-10-28 23:26:28 25 4
gpt4 key购买 nike

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

在认证后,应用服务器返回一个带有认证 token 的 cookie,代表服务器 session 。当我从我的文件系统 (file://) 运行 JS 应用程序时,我可以看到一旦客户端收到 cookie,它就会在所有后续 API 请求中发送。当我在 Node 服务器上运行 JS 应用程序并通过 node-http-proxy (RoutingProxy) 代理 API 调用时,请求 header 从不包含 cookie。

我需要手动处理一些事情以通过代理支持这种类型的 session 持久性吗?我一直在研究 node-http-proxy 代码,但这有点过头了,因为我是 Node 新手。

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

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,将其存储在变量中,并将其作为 header 传递给所有后续请求。这样反向代理就充当了 cookie。

on('proxyReq', function(proxyReq){ proxyReq.setHeader('cookie', 'sessionid=' + cookieSnippedValue) 

关于javascript - 通过 node-http-proxy 持久化基于 cookie 的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com