express 4.X和5.X,配置http2都报错

Gomi
  • 1.3k

关于express 4.17.1配置http2,之前使用spdy,在跳转某些页面下会失败。报错
企业微信截图_16342000251815.png

然后升级到express 5.0 alpha,使用http2模块,又报错
企业微信截图_1634200114917.png

这两个问题我去找了,两个库都有issue,并且都还处于未修复的状态...
有没有大佬成功配置过基于express + http2的webpack开发服务器的?

回复
阅读 1k
2 个回答
Gomi
  • 1.3k
✓ 已被采纳

先说一下环境:express4.X + spdy + http-proxy-middleware实现本地dev server的HTTP2环境。

问题是:大部分情况下正常,但遇到请求某些静态资源的时候,比如说某个js文件,请求状态显示200,但chrome显示请求未完成,如下图
企业微信截图_16375449911649.png

然后导致了整个页面无法加载,因为是单页应用,只有1个vendor.js,所有页面加载逻辑都在里面。

于是换成了另一个随便写的js文件,能够正常加载。说明是js文件内容和目前的http2环境冲突了。

于是又继续排查,换成http1.1正常,生产环境ngxin http2环境也正常。那么就只有可能是本地的spdy的http2和http-proxy-middleware的问题了。

目前排查到的原因,大概率是因为http-proxy-middleware中间件在代理Http2请求后,返回没有完成res.end, 造成的请求某些资源会一直处于未完成状态。解决方案是暂时通过proxy的钩子,自己主动去触发新的请求,绕过proxy的原本代理的请求

const PROXY_CONFIG = {
    '/a/*.js': {
        selfHandleResponse: true,
        onProxyReq: async (proxyReq, req, res) => {
              if (...) {
                    https.get(url, opt, () => {})
              }
        }
    }
}

http-proxy-middleware 这个代理有好多问题,之前遇到过 Sever-Sent Event(SSE)也是有类似的问题!

宣传栏