You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LoopBack 4应用中配置使用HTTP/2协议

LoopBack 4 启用HTTP/2 实操步骤

前置说明

  • 主流浏览器仅支持TLS加密的HTTP/2(h2),不支持明文HTTP/2(h2c),面向公网用户的服务必须配置合法SSL证书;明文h2c仅适合无浏览器访问的内部服务间调用场景。
  • LoopBack 4 底层基于Node.js内置模块实现服务,不需要额外安装第三方HTTP/2依赖包,直接复用Node.js原生http2模块即可。

具体操作流程

1. 准备SSL证书

  • 本地开发测试可直接用openssl生成自签名证书,在项目根目录执行以下命令:
    openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -keyout localhost-privkey.pem -out localhost-cert.pem
    
    执行完成后会在当前目录生成私钥文件localhost-privkey.pem和证书文件localhost-cert.pem。
  • 生产环境直接使用CA机构签发的SSL证书即可,证书路径不要硬编码在代码中,统一通过环境变量读取。

2. 修改REST服务配置

打开项目src/application.ts文件,按以下步骤修改配置:

  1. 顶部导入依赖模块:
    import * as http2 from 'http2';
    import * as fs from 'fs';
    import { RestBindings } from '@loopback/rest';
    
  2. 在应用类构造函数的REST服务配置中,新增HTTP/2相关参数,原有端口、接口文档等配置可直接保留:
    export class MyLb4Application extends BootMixin(
      ServiceMixin(RepositoryMixin(RestApplication)),
    ) {
      constructor(options: ApplicationConfig = {}) {
        super(options);
    
        // 配置REST服务
        this.configure(RestBindings.SERVER).to({
          // 原有配置例如 port: 3000, apiExplorer: {} 等保持不变
          // 新增以下配置
          protocol: 'https',
          httpServerOptions: {
            // 指定使用Node.js原生http2模块创建安全服务
            createSecureServer: http2.createSecureServer,
            // 读取证书,优先读取环境变量配置的路径,本地开发 fallback 到自签名证书
            key: fs.readFileSync(process.env.SSL_KEY_PATH ?? './localhost-privkey.pem'),
            cert: fs.readFileSync(process.env.SSL_CERT_PATH ?? './localhost-cert.pem'),
            // 开启HTTP/1.1兼容,不支持HTTP/2的老客户端会自动降级,不会直接连接失败
            allowHTTP1: true,
          },
        });
    
        // 下方原有项目配置、路由挂载等逻辑保持不变
      }
    }
    
  • 如果是内部服务需要启用明文h2c,把protocol改为http,删除证书相关配置,在httpServerOptions中增加createServer: http2.createServer即可,注意该模式无法被浏览器识别。

3. 验证HTTP/2是否生效

  1. 正常启动应用:npm start
  2. 命令行验证:执行以下curl命令,返回响应头第一行为HTTP/2 200即为配置生效:
    curl -I --http2 -k https://localhost:3000/ping
    
    命令中-k参数用于忽略本地自签名证书的校验,生产环境验证时去掉该参数即可。
  3. 浏览器验证:访问https://localhost:3000/explorer,打开开发者工具-网络面板,勾选协议列,对应请求的协议显示为h2即为正常。

常见注意事项

  • Node.js版本建议使用16.x/18.x LTS版本,12.x以下版本的原生http2模块存在已知内存泄漏、握手兼容问题,不建议使用。
  • 如果服务前端挂载了Nginx、CDN等反向代理,需要在代理层同步开启HTTP/2配置,并透传协议相关请求头,否则仅客户端到代理段走HTTP/2,代理到应用段仍为HTTP/1.1,无法获得全链路性能收益。
  • 证书、私钥文件不要提交到代码仓库,生产环境通过环境变量、配置中心统一管理,同时严格控制文件读取权限。
  • 如果应用同端口部署了Socket.IO服务,需要将Socket.IO升级到3.x及以上版本,低版本不兼容HTTP/2握手逻辑,会出现连接失败问题。

内容的提问来源于stack exchange,提问作者user3170450

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:06:07