使用HTTPS和HTTP Express(node.js)

时间:2013-08-15 09:44:25

标签: javascript node.js http https express

我在node.js上使用express(3.0)框架来路由我的应用程序。

我的大多数应用程序都使用http协议,但我只想通过https提供一条特定的路由。这是我的API的一部分,负责注册和验证用户。

例如:

app.get('/connect', function(req, res){
 // Must be on HTTPS, if not redirect to HTTPS
});

app.post('/connect', function(req, res){
  // Must be on HTTPS
});

app.get('/', function(req, res){
 // Must be on HTTP
});

app.get('/build', function(req, res){
 // Must be on HTTP
});

如何在同一个应用程序中使用两者?我很难在野外找到任何这方面的例子。

3 个答案:

答案 0 :(得分:10)

只需将app(实际上是请求处理函数)传递给createServerhttp的{​​{1}}。

https

HTTP和HTTPS请求都通过同一个Express应用程序进行路由。在路由处理程序中,要检查请求是否是通过https进行的,请使用var express = require('express') , http = require('http') , https = require('https') , app = express(); http.createServer(app); https.createServer({ ... }, app);

req.secure

作为旁注,现代智慧认为混合的http / https网站不安全。您可以通过要求他们通过SSL登录来保护用户的密码,但随后切换回http以用于后续请求会使攻击者trivial窃取用户的登录cookie。

考虑通过SSL登录用户发出所有请求。

答案 1 :(得分:1)

尝试这种方法。创建两个快速请求处理程序(app_http和app_https)。

在创建http服务器时将app_http作为请求处理程序传递(http.createServer(app_http))。

在创建https服务器时将app_https作为请求处理程序传递(https.createServer(options,app_https))。

var express = require('express'),
    http = require('http'),
    https = require('https');

var app_http = express(); // this one to handle http request

var app_https = express(); // this to handle httpS requests.


app_https.get('/connect', function(req, res){
 // Must be on HTTPS, if not redirect to HTTPS
});

app_https.post('/connect', function(req, res){
  // Must be on HTTPS
});

app_http.get('/', function(req, res){
 // Must be on HTTP
});

app_http.get('/build', function(req, res){
 // Must be on HTTP
});

    //call here http.createServer &  https.createServer with needed details.

答案 2 :(得分:1)

const express = require('express');
const app = express();
const fs = require('fs');
const options = {
    key:fs.readFileSync('./ssl/privkey.pem'),
    cert:fs.readFileSync('./ssl/allchange.pem')
};
const https = require('https').createServer(options,app);
const http = require('http').createServer(app);
app.get('/',(req,res) => {
    (req.protocol == 'http') ? res.redirect('https://www.pkred.com/') : // code
        // More code
        // End code ;
}
app.get('/:id',(req,res) => {
    (req.protocol == 'http') ? res.redirect(`https://www.pkred.com/${req.params.id}`) : // code
        // More code
        // End code ;
}
http.listen(8080,() => console.log('PORT :: 8080'));
https.listen(4433,() => console.log('PORT :: 4433'));