Introduction
fasthttp is a Go HTTP library designed from scratch for high throughput and low memory allocation. Unlike the standard net/http package, it reuses request and response objects via object pooling, making it a strong choice for proxy servers, API gateways, and any service that handles tens of thousands of concurrent connections.
What fasthttp Does
- Provides a zero-allocation HTTP server and client for Go
- Reuses request/response objects with sync.Pool to reduce GC pressure
- Supports HTTP/1.1 pipelining and keep-alive connections by default
- Offers a RequestCtx-based API for handling requests without per-request heap allocation
- Includes built-in helpers for common tasks like file serving, routing, and compression
Architecture Overview
fasthttp avoids the net/http pattern of creating a new goroutine with fresh allocations per request. Instead, it maintains a worker pool and recycles RequestCtx objects. Buffers for headers, URI parsing, and body reading are pre-allocated and grown only when needed. This design trades API familiarity for raw throughput, making it measurably faster under sustained load while using less memory.
Self-Hosting & Configuration
- Install via
go get github.com/valyala/fasthttpwith Go 1.20+ - Configure concurrency limits with
Server.Concurrencyto cap worker goroutines - Set
Server.ReadTimeoutandServer.WriteTimeoutfor connection lifecycle control - Enable TLS by passing cert and key files to
ListenAndServeTLS - Use
Server.MaxRequestBodySizeto guard against oversized payloads
Key Features
- Up to 10x lower memory allocation per request compared to net/http
- Built-in connection pooling for the HTTP client
- Streaming request and response body support
- Hot path optimizations for header parsing and URI decoding
- Compatible with popular routers like fasthttp/router and fiber
Comparison with Similar Tools
- net/http — standard library, broader ecosystem, but higher allocation per request
- Fiber — web framework built on top of fasthttp with Express-like API
- Echo — net/http-based framework with middleware, slightly lower raw throughput
- Gin — net/http-based, strong middleware ecosystem, simpler migration from net/http
FAQ
Q: Can I use fasthttp as a drop-in replacement for net/http? A: No. The API differs significantly — fasthttp uses RequestCtx instead of http.Request/http.ResponseWriter. Migration requires rewriting handlers.
Q: Does fasthttp support HTTP/2? A: Not natively. For HTTP/2 you need net/http or a reverse proxy like Nginx in front.
Q: When should I stick with net/http? A: If your service is I/O-bound rather than CPU-bound, or if you rely heavily on net/http middleware, the standard library is the simpler choice.
Q: Is fasthttp production-ready? A: Yes. It has been used in production at scale for years and is the engine behind the Fiber framework.