我有一個簡單的基於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