Сохранение сеанса на основе файлов cookie через узел -http -прокси

У меня есть простой веб-сервер Node.js на основе Express, который я использую для разработки приложение JavaScript. Я настроил сервер на использование прокси-сервера node -http -для прокси-запросов API, которые приложение отправляет на сервер Jetty, который работает в другом домене и на другом порту. Эта установка работала безупречно, пока у меня не начались проблемы с управлением сеансом.

После аутентификации сервер приложений возвращает файл cookie с токеном аутентификации, представляющим сеанс сервера. Когда я запускаю JS-приложение из моей файловой системы (файл :// ), я вижу, что как только клиент получает файл cookie, он отправляется во всех последующих запросах API. Когда я запускаю приложение JS на сервере узла, а вызовы API передаются через узел -http -прокси (RoutingProxy ), заголовки запросов никогда не включают файл cookie.

Есть ли что-то, что мне нужно обработать вручную, чтобы поддерживать этот тип сохраняемости сеанса через прокси-сервер? Я копался в прокси-коде node -http -, но это немного выше моей головы, потому что я новичок в 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);

9
задан tomswift 24 April 2012 в 02:28
поделиться