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`

Codeigniter 3,适用于“http”但不适用于“https”

Http Auth 不适用于 PHP