fastify
Version:
Fast and low overhead web framework, for Node.js
95 lines (69 loc) • 2.19 kB
Markdown
<h1 align="center">Fastify</h1>
_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 })
```
[ ](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
[ ](https://nodejs.org/api/http.html) or
[ ](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
```
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
```