我有一个简单的基于Express的Node.js Web服务器,用于开发JavaScript应用程序。我将服务器设置为使用node-http-proxy来代理应用程序对运行在不同域和端口上的Jetty服务器的API请求。直到我开始遇到会话管理问题时,此设置一直在完美运行。坚持基于cookie的会话通过节点http代理
验证后,应用程序服务器会返回一个带有代表服务器会话的验证令牌的cookie。当我从我的文件系统(file://)运行JS应用程序时,我可以看到一旦客户端收到cookie,就会在所有后续的API请求中发送它。当我在节点服务器上运行JS应用程序并且通过node-http-proxy(RoutingProxy)代理API调用时,请求标头永远不会包含cookie。
是否有我需要手动处理以支持通过代理的这种类型的会话持久性?我一直在深入研究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);
我已在Web Inspector中确认客户端收到'set-cookie'标头。你可以在这里看到交易(http://i.imgur.com/VQV0a.png)。在这种情况下,请求cookie是由Express的cookieParser生成的,我试图用它来支持会话,但它似乎总是做它自己的事情。 – tomswift 2012-04-24 20:29:24
在GitHub中打开了一个问题,因为我努力尝试从代理服务器的响应中获取cookie并手动支持会话:https://github.com/nodejitsu/node-http-proxy/issues/236 – tomswift 2012-04-24 20:46:59