Registry / http-networking / http2-client

http2-client

JSON →
library1.3.5jsnpmunverified

http2-client is a Node.js library designed to provide a transparent, drop-in replacement for Node's native `http` and `https` modules. It allows applications to make requests that automatically negotiate between HTTP/1.1 and HTTP/2 protocols using ALPN, without requiring changes to the existing `http.request` or `http.get` interfaces. This is particularly useful for integrating HTTP/2 capabilities into older modules or applications that are tightly coupled to the HTTP/1.1 API. The library manages connection pooling for both protocols, ensuring efficient resource utilization. The current stable version is 1.3.5. Based on the provided release history (v1.3.2, v1.3.3), the package appears to have an infrequent release cadence, suggesting a maintenance rather than actively developed status. Key differentiators include its adherence to the standard Node.js `http` module API and automatic protocol detection.

npm install http2-client
INSTALL
IMPORT
SIG · HTTP2-CLIENT
H
http2-client
http-networkingjavascriptv1.3.5
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

request
const { request } = require('http2-client');
import { request } from 'http2-client';
The library primarily uses CommonJS syntax. Direct ES module imports are not officially supported or documented, potentially leading to errors.
get
const { get } = require('http2-client');
import get from 'http2-client';
Similar to `request`, `get` is a named export. Attempting a default import or ESM named import will fail.
HttpRequestManager
const { HttpRequestManager } = require('http2-client');
new http2Client.HttpRequestManager();
HttpRequestManager is a named export for creating custom request managers with specific defaults and separate caches.

This quickstart demonstrates how to use `http2-client`'s `request` function to make transparent requests to both HTTP/1.1 and HTTP/2 servers using the same API as Node's native `http` module. It prints the URL, status code, and HTTP version for each response.

const { request } = require('http2-client'); const h1Target = 'http://www.example.com/'; const h2Target = 'https://www.google.com/'; // Using google as example.com might not support h2 console.log('Making HTTP/1.1 request...'); const req1 = request(h1Target, (res) => { console.log(`\nUrl : ${h1Target}\nStatus : ${res.statusCode}\nHttpVersion : ${res.httpVersion}`); res.on('data', () => {}); // Consume response data res.on('end', () => console.log('HTTP/1.1 request ended.')); }); req1.on('error', (e) => console.error(`HTTP/1.1 request error: ${e.message}`)); req1.end(); console.log('\nMaking HTTP/2 request...'); const req2 = request(h2Target, (res) => { console.log(`\nUrl : ${h2Target}\nStatus : ${res.statusCode}\nHttpVersion : ${res.httpVersion}`); res.on('data', () => {}); // Consume response data res.on('end', () => console.log('HTTP/2 request ended.')); }); req2.on('error', (e) => console.error(`HTTP/2 request error: ${e.message}`)); req2.end();
Debug
Known issues
gotchaThe package is primarily designed for CommonJS environments. While Node.js itself supports ESM, `http2-client`'s documentation and examples exclusively use `require()`. Attempting direct ES module `import` syntax may lead to runtime errors or require bundler configuration.
fix
Ensure your project is configured for CommonJS, or use dynamic `import()` if absolutely necessary within an ESM context, though this is not officially supported by the library.
affects: >=1.0.0
gotchaThe README states 'All Http2 features are available except push.' Server push is a core HTTP/2 feature that this client explicitly does not support. Applications relying on HTTP/2 server push will need an alternative solution.
fix
If HTTP/2 server push is a requirement, consider using Node.js's native `http2` module directly or a different HTTP client library that offers full HTTP/2 feature parity.
affects: >=1.0.0
gotchaThe description claims 'it's the only http2/https compatible API for clients.' This claim is likely outdated given the evolution of Node.js's native HTTP/2 support, the introduction of `fetch` in Node.js, and other modern HTTP client libraries. Relying on this package as the *only* option might miss more current and actively maintained alternatives.
fix
Evaluate modern alternatives like `undici` or Node.js's built-in `fetch` API, which offer robust HTTP/2 support, especially for newer projects, if active development and broader feature sets are crucial.
affects: >=1.0.0
gotchaThe library automatically falls back to HTTP/1.1 if the Node.js version doesn't support HTTP/2. While convenient, this might mask underlying environment issues or unexpected performance characteristics if HTTP/2 was expected but not achieved.
fix
Ensure your Node.js version (typically >=8.8.1 for `http2` module availability) supports HTTP/2 if you intend to use it. Monitor `res.httpVersion` in your callbacks to confirm the protocol used.
affects: >=1.0.0
Errors
Common errors & fixes
TypeError: Cannot destructure property 'request' of 'require(...)' as it is undefined.
This error typically indicates that `http2-client` was installed or imported incorrectly, or that the Node.js environment has issues resolving the module.
fix
First, ensure `npm install http2-client` was successful. If using a bundler, verify CommonJS modules are correctly handled. If running in an ES module context, consider if `require()` is appropriate or if a different library designed for ESM is needed.
Error: Protocol "https:" not supported. Expected "http:"
While `http2-client` supports HTTPS, this error might occur if an incorrect `protocol` option is explicitly set in the request options, overriding the automatic detection, or if an older Node.js version with limited HTTPS/ALPN capabilities is used.
fix
Remove explicit `protocol` options if you want the library to automatically handle protocol detection based on the URL. Ensure your Node.js version supports ALPN for HTTPS/2 negotiation (typically Node.js 8.8.1+).
Upgrade
Version history
1.3.5latest on npm
Audit
Dependencies

No dependency data recorded yet.

Agent activity
10 hits · last 30 days
node
10
Resources
http2-client — npm install http2-client · libregistry