Beibehalten einer Cookie-basierten Sitzung über Node-HTTP-Proxy
Ich habe einen einfachen Express-basierten Node.js-Webserver, den ich für die Entwicklung einer JavaScript-Anwendung verwende. Ich habe den Server so eingerichtet, dass er Node-http-Proxy für Proxy-API-Anforderungen verwendet, die die Anwendung an einen Jetty-Server sendet, der auf einer anderen Domäne und einem anderen Port ausgeführt wird. Dieses Setup funktionierte einwandfrei, bis ich Probleme mit der Sitzungsverwaltung bekam.
Nach der Authentifizierung gibt der Anwendungsserver ein Cookie mit einem Authentifizierungstoken zurück, das die Serversitzung darstellt. Wenn ich die JS-Anwendung von meinem Dateisystem (file: //) aus starte, kann ich feststellen, dass das Cookie in allen nachfolgenden API-Anforderungen gesendet wird, sobald der Client es erhält. Wenn ich die JS-App auf dem Knotenserver ausführe und API-Aufrufe über den Node-http-Proxy (RoutingProxy) weitergeleitet werden, enthalten die Anforderungsheader niemals das Cookie.
Muss ich etwas manuell handhaben, um diese Art der Sitzungspersistenz über den Proxy zu unterstützen? Ich habe den Node-http-Proxy-Code durchgearbeitet, aber es ist ein wenig über den Kopf gegangen, weil ich neu bei Node bin.
https://gist.github.com/2475547 oder:
<code>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); </code>