```yaml
product: AlterLab
title: "Connection Pooling — Web Scraping Glossary | AlterLab"
comparison_context: "AlterLab is an alternative to Firecrawl, ScrapingBee, and Bright Data."
source_url: https://alterlab.io/glossary/connection-pooling
```

infrastructure

# Connection Pooling

Connection pooling reuses open TCP/TLS connections across multiple HTTP requests to reduce handshake overhead and improve scraping throughput.

Establishing a TCP connection involves a three-way handshake; establishing a TLS connection adds certificate exchange and key negotiation — together adding 100–500 ms of latency before the first byte of data arrives. Connection pooling maintains a set of already-established connections that can be reused for subsequent requests to the same host, eliminating this overhead.

HTTP/1.1 introduced `Keep-Alive` to reuse connections serially. HTTP/2 goes further by multiplexing multiple concurrent requests over a single connection, making connection pooling even more impactful. Most modern HTTP client libraries (Python's `httpx`, `requests.Session`, Node's `axios`) maintain connection pools automatically.

For scrapers making many requests to the same domain, connection pooling can improve throughput significantly. However, reusing connections also means the server can track session state across requests, which may be used by anti-bot systems to build a longer behavioural profile.

### What is Connection Pooling?

Connection pooling reuses open TCP/TLS connections across multiple HTTP requests to reduce handshake overhead and improve scraping throughput.

### How does AlterLab handle Connection Pooling?

For scrapers making many requests to the same domain, connection pooling can improve throughput significantly. However, reusing connections also means the server can track session state across requests, which may be used by anti-bot systems to build a longer behavioural profile.

## Examples

```
# httpx: use a persistent client (connection pool enabled)
import httpx

with httpx.Client(http2=True) as client:
    for url in urls:
        response = client.get(url)
        process(response)
# Connections are reused across all requests in the with block
```

## Related Terms

[HTTP HeadersKey-value metadata fields sent with HTTP requests and responses that communicate authentication, content type, caching, and other directives.](https://alterlab.io/glossary/http-headers)[ConcurrencyConcurrency in scraping refers to the number of requests or browser sessions running in parallel, which directly controls throughput and resource consumption.](https://alterlab.io/glossary/concurrency)[Rate LimitingA server-side control that caps the number of requests accepted from a single IP or session within a time window, returning HTTP 429 when exceeded.](https://alterlab.io/glossary/rate-limiting)[TLS FingerprintA signature derived from TLS handshake parameters a client sends when opening an HTTPS connection, used by anti-bot systems to classify traffic.](https://alterlab.io/glossary/tls-fingerprint)[Proxy PoolA managed collection of proxy IP addresses used to distribute outbound requests across multiple origins and stay below per-IP rate limits.](https://alterlab.io/glossary/proxy-pool)

## Extract Connection Pooling data from any website

AlterLab returns clean, structured data from any public URL — no scraper infrastructure needed. Start free, no credit card required.

[View API docs](https://alterlab.io/docs/api/rest)

[Back to Glossary](https://alterlab.io/glossary)