Hoffman Web Seeding BEP 17 vs BEP 19 Explained

This article explores the mechanics of the BitTorrent Hoffman-style web seeding specification (BEP 17) and compares it with the GetRight-style web seeding specification (BEP 19). Web seeding allows BitTorrent clients to download piece data from traditional HTTP or FTP servers alongside regular peer-to-peer swarms. While both BEP 17 and BEP 19 fulfill the goal of integrating web servers as fallback seeders, they diverge significantly in how requests are structured, server-side requirements, and multi-file handling.

Understanding BEP 17 (Hoffman Style)

BEP 17, created by John Hoffman for BitTornado, defines a web seeding protocol where the client interacts with specialized scripts on an HTTP server rather than requesting static files directly.

In BEP 17, the .torrent metadata includes an httpseeds key containing a list of URLs pointing to backend scripts or redirectors. When a BitTorrent client requires specific pieces of a torrent, it sends standard HTTP GET requests appended with query parameters detailing the swarm’s info-hash, the requested piece index, and the byte ranges within that piece.

A typical BEP 17 request looks like:

http://example.com/seed.php?info_hash=HASH&piece=INDEX&ranges=START-END

Because the server receives specific piece parameters, it must execute server-side logic (e.g., via PHP, Python, or a custom daemon) to parse the request, extract the appropriate byte offset from the target file or archive, and return the raw binary payload to the client.

Understanding BEP 19 (GetRight Style)

BEP 19, formulated by Michael Burford of GetRight, is the more widely implemented alternative to BEP 17. Instead of relying on server-side processing scripts, BEP 19 allows BitTorrent clients to download from standard, unmodified HTTP 1.1 servers.

In BEP 19, the .torrent file contains an url-list key with URLs pointing directly to static file locations. The client calculates the exact byte offsets corresponding to the pieces it needs and issues standard HTTP GET requests using the standard Range: header (e.g., Range: bytes=0-16383). The web server merely serves the byte ranges as it would for any standard resumable download.

Key Differences Between BEP 17 and BEP 19

1. Server Configuration and Requirements

2. Multi-File Torrents

3. URL Structure and Request Protocol

4. Adoption and Compatibility

Due to the simplicity of serving static assets without executing backend code, BEP 19 gained broad support across almost all modern BitTorrent clients (such as libtorrent-based clients, qBittorrent, and Transmission) and content delivery networks. BEP 17 remains a legacy specification, primarily used in custom or specialized environments where on-the-fly piece generation is necessary.