ExperimentalWarning:http2 模块是一个实验性 API

Posted

技术标签:

【中文标题】ExperimentalWarning:http2 模块是一个实验性 API【英文标题】:ExperimentalWarning: The http2 module is an experimental API 【发布时间】:2019-02-14 17:12:42 【问题描述】:

我在 Node JS 10.9 中使用 HAPI JS 和 HTTP/2。当我使用这个例子启动服务器时,

const fs = require('fs')
const Hapi = require('hapi')
const http2 = require('http2')

const server = new Hapi.Server()
server.connection(
 listener: http2.createServer(),
 host: 'localhost',
 port: 3000
)

server.route(
 method: 'GET',
 path:'/hello',
 handler: function (request, reply) 
   return reply('Hello, World!')
 
)

server.start((err) => 
 if (err) console.error(err)
 console.log(`Started $server.connections.length connections`)
)

我在控制台上收到此警告

(node:16600) ExperimentalWarning: The http2 module is an experimental API.

我在网上找不到相关的解释,我们是否可以在生产模式下使用它?可以在生产模式下使用 HTTP/2 并出现此类警告吗?

【问题讨论】:

您使用的是哪个版本的 node.js?根据 10.10 的文档,http2 是稳定的,因此您不应该在最新版本中收到该警告。 节点版本 10.9 所以我们应该使用较新版本的节点> = 10.10.0,我在我的阿波罗服务器上的节点--version v10.0.0 上也收到了这个警告,而且我的服务器启动速度也很慢。 【参考方案1】:

正如@DoMiNeLa10 所说,实验性警告已在 10.10 中删除:

https://github.com/nodejs/node/pull/22716:

http2

◦ http2 模块不再是实验性的。 #22466

这里很好地讨论了使其非实验性所涉及的所有工作:https://github.com/nodejs/node/issues/19453

【讨论】:

以上是关于ExperimentalWarning:http2 模块是一个实验性 API的主要内容,如果未能解决你的问题,请参考以下文章

ExperimentalWarning: The fs.promises API is experimental

TrafficServer http2 代码分析

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?

http2 中的 half close 有啥作用? http2中流状态的本地和远程之间的区别是啥?

我们是不是需要在 Apache 服务器上启用 http2,如果 CDN 启用了 Http2

nginx如何启用对HTTP2的支持 | nginx如何验证HTTP2是否已启用