我正在使用 node.js 上的 express (3.0) 框架来路由我的应用程序。
我的大多数应用程序都使用 http
协议(protocol),但是我只想通过 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
});
如何促进在同一个应用程序中同时使用两者?我正在努力寻找这样的例子。
最佳答案
只需将您的 app
(它实际上是一个请求处理函数)传递给 http
和 https
的 createServer
>.
var express = require('express')
, http = require('http')
, https = require('https')
, app = express();
http.createServer(app);
https.createServer({ ... }, app);
HTTP 和 HTTPS 请求都通过同一个 Express 应用进行路由。在路由处理程序中,要检查是否通过 https 发出请求,请使用 req.secure
。
app.get('/route', function(req, res) {
if (req.secure) {
...
} else {
res.redirect(301, 'https://example.com/route');
}
});
作为旁注,现代智慧认为混合 http/https 网站不安全。您可以通过要求用户通过 SSL 登录来保护用户的密码,但随后切换回 http 进行后续请求会使其成为 trivial让攻击者窃取用户的登录 cookie。
考虑由登录用户通过 SSL 发出所有请求。
关于javascript - Express (node.js) 使用 HTTPS 和 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250134/