2016-02-17 18 views
15

Unterstützt NodeJS 4.x oder 5.x nativ das HTTP/2-Protokoll? Ich weiß, dass es http2 Paket gibt, aber es ist eine externe Sache.NodeJS native http2-Unterstützung

Gibt es Pläne, die http2-Unterstützung in den Kern des Knotens zu integrieren?

Antwort

7

--expose-http2 Flag ermöglicht experimentelle HTTP2 Unterstützung. Dieses Flag kann seit dem 5. August 2017 (pull request) bei der nächtlichen Erstellung (Node v8.4.0) verwendet werden.

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 Flag kann auch da Knoten v8.5.0 hinzugefügt werden.

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

client.mjs

import http2 from 'http2'; 

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

Ich benutze NVS (Node Version Switcher) zum Testen Nightly Builds.

nvs add nightly 
nvs use nightly 
+0

Vergessen Sie nicht, 'process.env.NODE_TLS_REJECT_UNAUTHORIZED =" 0 ";' für selbstsignierte Zertifikate hinzuzufügen, um eine SSL-Verbindung herstellen zu können. –

+0

Siehe auch das aktuelle clientseitige Beispiel in der Node.js-Dokumentation: https://nodejs.org/api/http2.html#http2_client_side_example. –

1

Knoten 8.4.0 verfügt über eine experimentelle Http2-API. Dokumente hier nodejs http2

+0

Weißt du, wann http2 Unterstützung in Nodejs nicht mehr experimentell sein wird? – funkenstrahlen

2

Von Knoten v8.8.1 benötigen Sie nicht das --expose-http2 Flag, wenn Sie Ihren Code ausführen.

Der einfachste Weg, um mit HTTP/2 zu beginnen, ist die Verwendung der Kompatibilitäts-API, die Node.js verfügbar macht.

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); 

Ich habe mehr darüber geschrieben, über die native HTTP/2 Node.js exposes to create a server here verwenden.

+0

Siehe auch das aktuelle serverseitige Beispiel in der Node.js-Dokumentation: https://nodejs.org/api/http2.html#http2_server_side_example. –