Fastify

HTTP2

Fastify 提供了从 Node 8.8.0 开始的对 HTTP2 实验性支持Fastify 支持 HTTPS 和普通文本的 HTTP2 支持。需要注意的是,Node 8.8.1 以上的版本才支持 HTTP2。

当前没有任何 HTTP2 相关的 APIs 是可用的,但 Node reqres 可以通过 RequestReply 接口访问。欢迎相关的 PR。

安全 (HTTPS)

所有的现代浏览器都__只能通过安全的连接__ 支持 HTTP2:

  1. 'use strict'
  2. const fs = require('fs')
  3. const path = require('path')
  4. const fastify = require('fastify')({
  5. http2: true,
  6. https: {
  7. key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),
  8. cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))
  9. }
  10. })
  11. fastify.get('/', function (request, reply) {
  12. reply.code(200).send({ hello: 'world' })
  13. })
  14. fastify.listen(3000)

ALPN 协商允许在同一个 socket 上支持 HTTPS 和 HTTP/2。 Node 核心 reqres 对象可以是 HTTP/1 或者 HTTP/2Fastify 自带支持开箱即用:

  1. 'use strict'
  2. const fs = require('fs')
  3. const path = require('path')
  4. const fastify = require('fastify')({
  5. http2: true,
  6. https: {
  7. allowHTTP1: true, // 向后支持 HTTP1
  8. key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),
  9. cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))
  10. }
  11. })
  12. // 该路由从 HTTPS 与 HTTP2 均可访问
  13. fastify.get('/', function (request, reply) {
  14. reply.code(200).send({ hello: 'world' })
  15. })
  16. fastify.listen(3000)

你可以像这样测试你的新服务器:

  1. $ npx h2url https://localhost:3000

纯文本或者不安全

如果你搭建微服务,你可以纯文本连接 HTTP2,但是浏览器不支持这样做。

  1. 'use strict'
  2. const fastify = require('fastify')({
  3. http2: true
  4. })
  5. fastify.get('/', function (request, reply) {
  6. reply.code(200).send({ hello: 'world' })
  7. })
  8. fastify.listen(3000)

你可以像这样测试你的新服务器:

  1. $ npx h2url http://localhost:3000