fetch-h2: HTTP/1+2 Fetch API for Node.js

3.0.2 · active · verified Wed Apr 22

fetch-h2 is a robust Node.js implementation of the standard Fetch API, providing a familiar, browser-like interface for making HTTP requests within a Node.js environment. It transparently handles both HTTP/1.1 and HTTP/2 connections, automatically negotiating the protocol via ALPN for `https://` URLs, and defaulting to HTTP/1.1 for `http://` unless `http2://` is explicitly used for plain-text HTTP/2 (h2c). The library is currently stable at version 3.0.2 and receives regular maintenance, including bug fixes and dependency updates. Key differentiators include its close adherence to the Fetch API standard, transparent socket re-use and session management, built-in in-memory cookie support per context, and automatic decoding of `br`, `gzip`, and `deflate` encodings. It offers a higher-level, more developer-friendly abstraction for HTTP/2 client requests in Node.js compared to the lower-level native `http2` module. Since version 3.0.0, it requires Node.js 12 or newer.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates a basic GET request using `fetch`, handling the response, and error conditions, including custom headers.

import { fetch } from 'fetch-h2';

async function fetchData() {
  const targetUrl = process.env.API_URL ?? 'https://httpbin.org/get';
  try {
    const response = await fetch(targetUrl, {
      headers: {
        'User-Agent': 'fetch-h2-checklist-day-example/1.0'
      }
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.json();
    console.log('Successfully fetched data:', data.url, data.headers['User-Agent']);
    console.log('Headers:', response.headers.get('Content-Type'));
  } catch (error) {
    console.error('Failed to fetch:', error.message);
  }
}

fetchData();

view raw JSON →