Ho un semplice server web Node.js basato su Express che sto usando per lo sviluppo di un'applicazione JavaScript. Ho configurato il server in modo che utilizzi node-http-proxy per le richieste API proxy che l'applicazione esegue su un server Jetty in esecuzione su un dominio e una porta diversi. Questa configurazione ha funzionato perfettamente fino a quando ho iniziato a incontrare problemi con la gestione delle sessioni.Persistenza di una sessione basata su cookie su node-http-proxy
Dopo l'autenticazione, il server delle applicazioni restituisce un cookie con un token di autenticazione che rappresenta la sessione del server. Quando eseguo l'applicazione JS al di fuori del mio filesystem (file: //), posso vedere che una volta che il client riceve il cookie, viene inviato in tutte le successive richieste API. Quando eseguo l'app JS sul server nodo e le chiamate API vengono inoltrate tramite nodo-http-proxy (RoutingProxy), le intestazioni delle richieste non includono mai il cookie.
C'è qualcosa che devo gestire manualmente per supportare questo tipo di persistenza di sessione attraverso il proxy? Sto scavando attraverso il codice del nodo-http-proxy, ma è un po 'sopra la mia testa perché sono nuovo di Nodo.
https://gist.github.com/2475547 o:
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);
Ho confermato in Web Inspector che il client riceve l'intestazione 'set-cookie'. Puoi vedere la transazione [qui] (http://i.imgur.com/VQV0a.png).Il cookie di richiesta in questo caso viene generato dal cookieParser di Express che stavo cercando di utilizzare per supportare la sessione ma sembra che faccia sempre le sue cose. – tomswift
Inaugurato un problema in GitHub mentre faccio fatica a provare ad ottenere il cookie dalla risposta del server proxy e a supportare manualmente la sessione: https://github.com/nodejitsu/node-http-proxy/issues/236 – tomswift