expressjs http 不适用于 spdy
Posted
技术标签:
【中文标题】expressjs http 不适用于 spdy【英文标题】:expressjs http does not work with spdy 【发布时间】:2017-06-28 20:09:57 【问题描述】:我想将所有不安全的 http 流量重定向到安全的 spdy 服务器。如果我要使用 https 协议打开页面,我会收到来自服务器的响应,但是当我尝试使用 http 访问它时,浏览器一直在旋转,我根本没有响应。
const express = require('express')
const https = require('spdy')
const http = require('http')
const ECT = require('ect')
const upload = multer( dest: __dirname + '../public/uploads/')
const cookieParser = require('cookie-parser')
const bodyParser = require('body-parser')
const session = require('express-session')
const passport = require('passport')
const redis = require('redis')
const RedisStore = require('connect-redis')(session)
const fs = require('fs')
const url = require('url')
const expressValidator = require('express-validator')
const compression = require('compression')
const _ = require('lodash')
const env = process.env.NODE_ENV || 'production'; // development or production => changes config and secrets settings
const secrets = require('./config/secrets')[env];
const azureconf = require('./config/azure');
const app = express()
const ectRenderer = ECT( watch: true, root: __dirname + '/views', ext : '.ect', gzip: true );
const client = redis.createClient()
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true ));
app.use(cookieParser());
app.use(expressValidator());
app.set('view engine', 'ect');
app.engine('ect', ectRenderer.render);
app.use(compression())
app.use(express.static(__dirname + '/public', maxAge: 2419200 ));
app.use(session(
store: new RedisStore(
host:'127.0.0.1',
port: 6379,
client: client
),
secret:'mostsecuresecretintheworld',
saveUninitialized: false,
resave: true,
cookie:
path: '/',
httpOnly: false,
secure: true,
maxAge: null
,
domain: 'mydomain.com'
));
const certOptions = key: fs.readFileSync('certs/server/my-server.key.pem'), cert: fs.readFileSync('certs/ServerCertificate.crt') ;
var unsecureServer = http.createServer(function (req, res)
res.writeHead(301, "Location": "https://" + req.headers['host'] + req.url );
res.end();
)
var secureServer = https.createServer(certOptions, app);
secureServer.listen(443);
unsecureServer.listen(80)
如果有任何帮助,我将不胜感激,谢谢。
【问题讨论】:
你用的是什么浏览器? IE。 Chrome 删除了对 SDPY caniuse.com/#search=spdy 的支持 npmjs.com/package/spdy 【参考方案1】:expressjs http 不适用于 spdy
因为 HTTP 不是 SPDY。这些是完全不同的协议。
见:
https://www.npmjs.com/browse/keyword/spdy对于支持 SPDY 的模块。
【讨论】:
我已经在使用这个模块了。 npmjs.com/package/spdy,我收到了来自 https:// 的回复,我在开发工具中看到了 http2。 我应该用http协议创建另一个服务器吧?以上是关于expressjs http 不适用于 spdy的主要内容,如果未能解决你的问题,请参考以下文章
对本地主机的调用不适用于 ReactJS/Axios/Express
Express JS 代码不适用于 pm2,但手动启动时(“node .”/“node index.js”)
netsh 不适用于 AddressAccessDeniedException:HTTP 无法注册 URL
错误:包装函数仅适用于 `onCall` HTTP 函数,不适用于 `onRequest`