You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.2 KiB
96 lines
2.2 KiB
4 years ago
|
<h1 align="center">Fastify</h1>
|
||
|
|
||
|
## HTTP2
|
||
|
|
||
|
_Fastify_ offers **experimental support** for HTTP2 starting from Node
|
||
|
8.8.0, which includes HTTP2 without a flag. _Fastify_ supports HTTP2
|
||
|
both over HTTPS or over plaintext. Note that HTTP2 is available only for node versions >= `8.8.1`.
|
||
|
|
||
|
Currently none of the HTTP2-specific APIs are available through
|
||
|
_Fastify_, but Node's `req` and `res` can be access 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('fs')
|
||
|
const path = require('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(3000)
|
||
|
```
|
||
|
|
||
|
ALPN negotiation 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('fs')
|
||
|
const path = require('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(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(3000)
|
||
|
```
|
||
|
|
||
|
You can test your new server with:
|
||
|
|
||
|
```
|
||
|
$ npx h2url http://localhost:3000
|
||
|
```
|
||
|
|