web-dev-qa-db-fra.com

Prise en charge de http2 natif NodeJS

Est-ce que NodeJS 4.x ou 5.x supporte nativement le protocole HTTP/2? Je sais qu'il existe un paquet http2 mais c'est une chose externe. 

Est-il prévu de fusionner le support http2 dans le noyau du nœud?

15
Oskar Szura

--expose-http2 flag active la prise en charge expérimentale de HTTP2. Ce drapeau peut être utilisé de nuit (Node v8.4.0) depuis le 5 août 2017 ( pull request ). 

node --expose-http2 client.js

client.js

const http2 = require('http2');
const client = http2.connect('https://stackoverflow.com');

const req = client.request();
req.setEncoding('utf8');

req.on('response', (headers, flags) => {
  console.log(headers);
});

let data = '';
req.on('data', (d) => data += d);
req.on('end', () => client.destroy());
req.end();

--experimental-modules peut également être ajouté depuis Node v8.5.0.

node --expose-http2 --experimental-modules client.mjs

client.mjs

import http2 from 'http2';

const client = http2.connect('https://stackoverflow.com');

J'utilise NVS (Node Version Switcher) pour tester les versions nocturnes.

nvs add nightly
nvs use nightly
9
masakielastic

Non pas encore.

Voici la discussion sur l'ajout de la prise en charge HTTP/2 au noyau NodeJS: https://github.com/nodejs/NG/issues/8

8
FF_Dev

À partir du noeud v8.8.1, vous n'avez pas besoin de l'indicateur --expose-http2 lorsque vous exécutez votre code. 

Le moyen le plus simple de se familiariser avec HTTP/2 consiste à utiliser l'API de compatibilité exposée par Node.js. 

const http2 = require('http2');
const fs = require('fs');

const options = {
    key: fs.readFileSync('./selfsigned.key'),
    cert: fs.readFileSync('./selfsigned.crt'),
    allowHTTP1: true
}

const server = http2.createSecureServer(options, (req, res) => {
  res.setHeader('Content-Type', 'text/html');
  res.end('ok');
});

server.listen(443);

J'ai écrit plus sur l'utilisation du natif HTTP/2 Node.js expose pour créer un serveur ici

2
everconfusedGuy

Le noeud 8.4.0 a une API Http2 expérimentale. Docs ici nodejs http2

1
el_bogavante