首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过node-http-proxy持久化基于cookie的会话

通过node-http-proxy持久化基于cookie的会话
EN

Stack Overflow用户
提问于 2012-04-24 10:28:40
回答 5查看 16.4K关注 0票数 11

我有一个简单的基于Express的Node.js web服务器,用于开发JavaScript应用程序。我将服务器设置为使用node-http-proxy代理应用程序向运行在不同域和端口上的Jetty服务器发出的API请求。在我开始遇到会话管理问题之前,这个设置一直运行得很完美。

在进行身份验证时,应用程序服务器返回一个带有代表服务器会话的身份验证令牌的cookie。当我在我的文件系统上运行JS应用程序时(file://) ),我可以看到,一旦客户端接收到cookie,它就会在所有后续的请求中发送。当我在节点服务器上运行JS应用程序,并且通过node-http-proxy (RoutingProxy)代理API调用时,请求头永远不会包含cookie。

是否需要手动处理才能通过代理支持这种类型的会话持久化?我一直在钻研node-http-proxy代码,但它有点超出了我的理解,因为我是Node的新手。

https://gist.github.com/2475547或:

代码语言:javascript
复制
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);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-08-29 18:54:25

我按照您的要求手动查看了响应,查看它是否是set-cookie,截取JSESSSIONID,将其存储在一个变量中,并将其作为标头传递给所有后续请求。通过这种方式,反向代理充当cookie。

代码语言:javascript
复制
on('proxyReq', function(proxyReq){ proxyReq.setHeader('cookie', 'sessionid=' + cookieSnippedValue) 
票数 5
EN

Stack Overflow用户

发布于 2016-09-18 11:14:38

您的本地服务器是否在http协议上运行,但从远程服务器接收的会话cookie带有Secure;,如:

代码语言:javascript
复制
'set-cookie':
[ 'JSESSIONID=COOKIEWITHSECURE98123; Path=/;HttpOnly;Secure;']

如果是,则在本地服务器响应客户端之前,从原始响应(从远程服务器到本地服务器的响应)头中提取set-cookie,删除Secure;并将其其余部分放入代理响应(从本地服务器到客户端的响应)头中,如下所示:

代码语言:javascript
复制
'set-cookie':
[ 'JSESSIONID=COOKIEWITHSECURE98123; Path=/;HttpOnly;']

然后客户端将自动获取会话cookie。

希望能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2012-04-24 10:56:26

理想情况下,代理的工作只是将请求转发到目的地,而不应该剥离像cookies这样的关键头部,但如果是这样的话,我认为您应该在https://github.com/nodejitsu/node-http-proxy/issues上提交一个针对它们的问题。

你还说过请求头从来没有包括cookie,有没有可能客户端从来没有收到过它?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10291000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档