Spaces:
Runtime error
Runtime error
| <h1 align="center">Fastify</h1> | |
| ## HTTP2 | |
| _Fastify_ supports HTTP2 over either HTTPS (h2) or plaintext (h2c). | |
| Currently, none of the HTTP2-specific APIs are available through _Fastify_, but | |
| Node's `req` and `res` can be accessed through our `Request` and `Reply` | |
| interface. PRs are welcome. | |
| ### Secure (HTTPS) | |
| HTTP2 is supported in all modern browsers __only over a secure connection__: | |
| ```js | |
| 'use strict' | |
| const fs = require('node:fs') | |
| const path = require('node:path') | |
| const fastify = require('fastify')({ | |
| http2: true, | |
| https: { | |
| key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')), | |
| cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert')) | |
| } | |
| }) | |
| fastify.get('/', function (request, reply) { | |
| reply.code(200).send({ hello: 'world' }) | |
| }) | |
| fastify.listen({ port: 3000 }) | |
| ``` | |
| [ALPN negotiation](https://datatracker.ietf.org/doc/html/rfc7301) allows | |
| support for both HTTPS and HTTP/2 over the same socket. | |
| Node core `req` and `res` objects can be either | |
| [HTTP/1](https://nodejs.org/api/http.html) or | |
| [HTTP/2](https://nodejs.org/api/http2.html). _Fastify_ supports this out of the | |
| box: | |
| ```js | |
| 'use strict' | |
| const fs = require('node:fs') | |
| const path = require('node:path') | |
| const fastify = require('fastify')({ | |
| http2: true, | |
| https: { | |
| allowHTTP1: true, // fallback support for HTTP1 | |
| key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')), | |
| cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert')) | |
| } | |
| }) | |
| // this route can be accessed through both protocols | |
| fastify.get('/', function (request, reply) { | |
| reply.code(200).send({ hello: 'world' }) | |
| }) | |
| fastify.listen({ port: 3000 }) | |
| ``` | |
| You can test your new server with: | |
| ``` | |
| $ npx h2url https://localhost:3000 | |
| ``` | |
| ### Plain or insecure | |
| If you are building microservices, you can connect to HTTP2 in plain text, | |
| however, this is not supported by browsers. | |
| ```js | |
| 'use strict' | |
| const fastify = require('fastify')({ | |
| http2: true | |
| }) | |
| fastify.get('/', function (request, reply) { | |
| reply.code(200).send({ hello: 'world' }) | |
| }) | |
| fastify.listen({ port: 3000 }) | |
| ``` | |
| You can test your new server with: | |
| ``` | |
| $ npx h2url http://localhost:3000 | |
| ``` | |