Ich habe einen einfachen Express-basierten Node.js-Webserver, den ich für die Entwicklung einer JavaScript-Anwendung verwende. Ich richte den Server ein, um Node-http-Proxy zu verwenden, um API-Anforderungen, die die Anwendung an einen Jetty-Server stellt, der auf einer anderen Domäne und einem anderen Port ausgeführt wird, zu Proxy. Dieses Setup hat einwandfrei funktioniert, bis ich Probleme mit der Sitzungsverwaltung hatte.Fortbestehen einer Cookie-basierten Sitzung über Knoten-http-Proxy
Nach der Authentifizierung gibt der Anwendungsserver ein Cookie mit einem Authentifizierungs-Token zurück, das die Serversitzung darstellt. Wenn ich die JS-Anwendung von meinem Dateisystem aus starte (Datei: //), kann ich sehen, dass sobald der Client das Cookie erhält, es in allen folgenden API-Anfragen gesendet wird. Wenn ich die JS-App auf dem Knotenserver ausführe und API-Aufrufe über Knoten-http-Proxy (RoutingProxy) weitergeleitet werden, enthalten die Anforderungsheader niemals das Cookie.
Gibt es etwas, das ich manuell behandeln muss, um diese Art von Sitzungspersistenz über den Proxy zu unterstützen? Ich habe den Knoten-http-Proxy-Code durchforstet, aber es ist etwas über meinem Kopf, weil ich neu bei Node bin.
https://gist.github.com/2475547 oder:
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);
Ich habe im Web Inspector bestätigt, dass der Client den Header 'set-cookie' erhält. Sie können die Transaktion [hier] sehen (http://i.imgur.com/VQV0a.png).Der Anfragecookie wird in diesem Fall von Express's CookieParser erzeugt, den ich benutzen wollte, um die Sitzung zu unterstützen, aber es scheint immer sein eigenes Ding zu machen. – tomswift
Ein Problem in GitHub wurde geöffnet, da ich mich bemühe, den Cookie aus der Antwort des Proxy-Servers zu holen und die Sitzung manuell zu unterstützen: https://github.com/nodejitsu/node-http-proxy/issues/236 – tomswift