Part of HTTP Toolkit: powerful tools for building, testing & debugging HTTP(S)
A module for serving HTTP, HTTPS and HTTP/2 connections, all over the same port.
Forked from the original httpolyglot
to fix various issues required for HTTP Toolkit, including:
- Support for HTTP/2
- Fixing
tlsClientError
: https://github.com/mscdex/httpolyglot/pull/11 - Include initially sniffed bytes aren't lost in subsequent
clientError
events (https://github.com/mscdex/httpolyglot/issues/13) - Dropping support for very old versions of Node (and thereby simplifying the code somewhat)
- Converting to TypeScript
- Event subscription support (subscribe to
server.on(x, ...)
to hear aboutx
from all internal servers - HTTP/2, HTTP/1, TLS and net)
- node.js -- v12.0.0 or newer
npm install @httptoolkit/httpolyglot
- Simple usage:
const httpolyglot = require('@httptoolkit/httpolyglot');
const fs = require('fs');
httpolyglot.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt')
}, function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end((req.socket.encrypted ? 'HTTPS' : 'HTTP') + ' Connection!');
}).listen(9000, 'localhost', function() {
console.log('httpolyglot server listening on port 9000');
// visit http://localhost:9000 and https://localhost:9000 in your browser ...
});
- Simple redirect of all http connections to https:
const httpolyglot = require('@httptoolkit/httpolyglot');
const fs = require('fs');
httpolyglot.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt')
}, function(req, res) {
if (!req.socket.encrypted) {
res.writeHead(301, { 'Location': 'https://localhost:9000' });
return res.end();
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Welcome, HTTPS user!');
}).listen(9000, 'localhost', function() {
console.log('httpolyglot server listening on port 9000');
// visit http://localhost:9000 and https://localhost:9000 in your browser ...
});
-
Server - A class similar to https.Server (except instances have
setTimeout()
from http.Server). -
createServer(< object >tlsConfig[, < function >requestListener]) - Server - Creates and returns a new Server instance.
TLS and HTTP connections are easy to distinguish based on the first byte sent by clients trying to connect. See this comment for more information.