---
title: "HTTP/3 adoption and Brotli vs gzip on Polish sites"
description: "39% of 7,785 .pl homepages advertise HTTP/3 and 44% come with Brotli or zstd, mostly via Cloudflare or LiteSpeed; nginx and Apache usually send gzip."
canonical_url: "https://www.outofplace.space/blog/http3-compression-polish-web"
language: "en"
last_updated: "2026-10-14"
alternates:
  pl: "https://www.outofplace.space/pl/blog/http3-i-kompresja-brotli-na-polskich-stronach.md"
---

# HTTP/3 adoption and Brotli vs gzip on Polish sites

> 39% of 7,785 .pl homepages advertise HTTP/3 and 44% come with Brotli or zstd, mostly via Cloudflare or LiteSpeed; nginx and Apache usually send gzip.

Published 2026-10-14 · Category: Performance · Tags: HTTP/3, Compression, Poland

Two in five Polish sites advertise HTTP/3, and fewer than half send their homepage with Brotli or zstd. We read the response headers of the homepages of 7,785 .pl sites in [the Tranco list of popular sites](https://tranco-list.eu/list/Y8YYG/full): 39% name HTTP/3 in their `Alt-Svc` header, 44% came compressed with Brotli or Zstandard, 50% with gzip and 5.5% not compressed at all.

Who switched them on is clear from the headers. 67% of the sites advertising HTTP/3 sit behind Cloudflare, and most of the rest run LiteSpeed, a web server that offers HTTP/3 out of the box. Sites served by nginx or Apache with no CDN in front mostly send gzip over TCP alone. So HTTP/3 adoption and the choice of Brotli vs gzip are, on the Polish web, mostly the defaults of whoever answers the request. This is the same census behind [our study of third-party scripts on Polish homepages](https://www.outofplace.space/blog/third-party-scripts-polish-web), read for transport instead of content.

- 39% of 7,785 Polish homepages advertise HTTP/3; behind Cloudflare 79% do, without a CDN 19%.
- Zstandard reaches 18% of sites, and 99% of those are behind Cloudflare, whose Free plan compresses with zstd by default.
- Without a CDN, 74% of homepages come with gzip and 8.1% with no compression.
- Recompressed, the median homepage is 10% smaller with Brotli 5 than with gzip 6.

## What HTTP/3 and the content encoding are

HTTP/3 ([RFC 9114](https://www.rfc-editor.org/rfc/rfc9114.html), June 2022) carries HTTP over QUIC, a transport on UDP, instead of TCP. A lost packet then holds up only the stream it belongs to rather than the whole connection, and a new connection needs fewer round trips before the first byte. A browser doesn't start with it. The first visit goes over TCP, and the server announces HTTP/3 in a response header, `Alt-Svc: h3=":443"; ma=86400`, which the RFC's section 3.1.1 describes. The browser may then try QUIC, and if UDP is blocked, it falls back to TCP.

Compression is a separate negotiation. The browser lists what it can decode in `Accept-Encoding`, the server picks one and names it in `Content-Encoding`. gzip is the old common ground; Brotli ([RFC 7932](https://www.rfc-editor.org/rfc/rfc7932.html), 2016) compresses text tighter; Zstandard ([RFC 8878](https://www.rfc-editor.org/rfc/rfc8878.html)) arrived in Chrome 123, whose [beta notes list the zstd content encoding](https://developer.chrome.com/blog/chrome-123-beta), and in [Firefox 126](https://www.firefox.com/en-US/firefox/126.0/releasenotes/), both in 2024.

`Alt-Svc` says what the server offers. It doesn't say whether a visitor's browser used HTTP/3: our crawler spoke HTTP/1.1 and only read the header. The shares below count sites that offer HTTP/3, not requests made over it.

## How many Polish sites use HTTP/3?

3,042 sites, 39% of the sample, advertise the final `h3` token. Another 4 offer only pre-standard drafts (`h3-29`, Google's `quic`), which we don't count. The chart sorts the sites by who answered: Cloudflare when its headers show, another CDN, or, with no CDN in the headers, the web server named in `Server`.

**Cloudflare and LiteSpeed carry HTTP/3 on the Polish web** (Share of .pl homepages whose Alt-Svc header advertises h3, by who answered the request · n per group in the table below · 95% intervals)

| Item | Value | 95% interval | n |
| --- | --- | --- | --- |
| Cloudflare | 79% | 77%–81% | 2,563 |
| Apache, no CDN | 5.7% | 4.7%–6.9% | 1,767 |
| nginx, no CDN | 4.2% | 3.3%–5.3% | 1,547 |
| LiteSpeed, no CDN | 96% | 94%–97% | 675 |
| No Server header, no CDN | 11% | 7.9%–14% | 399 |
| Another CDN | 31% | 26%–37% | 284 |
| Other servers, no CDN | 31% | 25%–38% | 192 |
| dcsaas (Shoper), no CDN | 0% | 0%–2.6% | 145 |
| IdeaWebServer, no CDN | 9.8% | 5.9%–16% | 143 |
| Microsoft IIS, no CDN | 1.4% | 0.3%–7.7% | 70 |

Source: Outofplace census, 24 Sept 2026; Tranco list Y8YYG. Chart: https://www.outofplace.space/data/blog/http3-compression-polish-web/charts/en/chart-cloudflare-and-litespeed-carry-http-3-on-the-polish-web.png Data: https://www.outofplace.space/data/blog/http3-compression-polish-web/2026-09-24/stacks.csv

Two groups stand apart. Behind Cloudflare, 79% of sites advertise HTTP/3; on LiteSpeed with no CDN, 96%. [LiteSpeed's documentation](https://docs.litespeedtech.com/lsws/cp/cpanel/quic-http3/) (read 14 October 2026) says "QUIC is on by default", and a host has to open UDP port 443 and have a trusted certificate. On nginx and Apache HTTP/3 is rare: 4.2% of nginx sites and 5.7% of Apache sites. nginx ships HTTP/3 in [a module](https://nginx.org/en/docs/http/ngx_http_v3_module.html) that is "not built by default" and still marked experimental.
The largest sites advertise HTTP/3 less often. Among the sample's top 1,000, 29% do, against 41% of the sites below them, though both use Cloudflare about equally often. Two things differ. LiteSpeed with no CDN is rarer at the top (2.7% against 9.6%), and the top sites behind Cloudflare advertise HTTP/3 less often (63% against 81%). We can't see why from the headers.

## Brotli vs gzip vs zstd: what Polish homepages come with

Our crawler asked for `zstd, br, gzip` with no preference between them, so each server chose by its own settings. Half the sample answered with gzip. The split follows the same line as HTTP/3.

**Behind Cloudflare, homepages come with zstd or Brotli; without a CDN, mostly gzip** (Content-Encoding of .pl homepages, by who answered the request · Accept-Encoding: zstd, br, gzip · n per row in the table)

| Item | Zstandard | Brotli | gzip | Not compressed | n |
| --- | --- | --- | --- | --- | --- |
| All sites | 18% | 26% | 50% | 5.5% | 7,785 |
| Cloudflare | 55% | 40% | 3.9% | 0.2% | 2,563 |
| Apache, no CDN | 0% | 7% | 83% | 10% | 1,767 |
| nginx, no CDN | 0.3% | 6.3% | 87% | 6.3% | 1,547 |
| LiteSpeed, no CDN | 0% | 82% | 16% | 1.3% | 675 |
| No Server header, no CDN | 1% | 12% | 69% | 18% | 399 |
| Another CDN | 0% | 37% | 56% | 7% | 284 |
| Other servers, no CDN | 1% | 26% | 62% | 11% | 192 |
| dcsaas (Shoper), no CDN | 0% | 0% | 100% | 0% | 145 |
| IdeaWebServer, no CDN | 0% | 0% | 99% | 1.4% | 143 |
| Microsoft IIS, no CDN | 0% | 1.4% | 66% | 33% | 70 |

Source: Outofplace census, 24 Sept 2026; Tranco list Y8YYG. Chart: https://www.outofplace.space/data/blog/http3-compression-polish-web/charts/en/chart-behind-cloudflare-homepages-come-with-zstd-or-brotli-without-a-c.png Data: https://www.outofplace.space/data/blog/http3-compression-polish-web/2026-09-24/encodings.csv

Behind Cloudflare, 55% of homepages came with Zstandard and 40% with Brotli. That matches [Cloudflare's compression documentation](https://developers.cloudflare.com/speed/optimization/content/compression/) (last updated 17 April 2026): on the Free plan "content is compressed by default using Zstandard", on Pro and Business with Brotli, on Enterprise with gzip. We can't see a site's plan, but almost every zstd answer in the sample came from Cloudflare.

Without a CDN the defaults are older. nginx's [gzip module](https://nginx.org/en/docs/http/ngx_http_gzip_module.html) is off until switched on and has no Brotli in its core; Apache has [mod_brotli](https://httpd.apache.org/docs/2.4/mod/mod_brotli.html) since 2.4.26, but a host has to enable it. LiteSpeed sites stand out again, with Brotli on 82% of them. Microsoft IIS sites are the least often compressed group.

## Is Brotli better than gzip?

To answer it on Polish pages rather than on a benchmark corpus, we compressed the HTML of each homepage again on one machine, with gzip, Brotli and Zstandard at eleven levels, and compared each size with gzip at level 6, zlib's default. 7,435 homepages took part (those cut at the census's 1 MiB cap, and a few with an empty body, did not), with a median of 154 kB of HTML.

**Brotli shrinks Polish homepages more than gzip, and more than zstd from mid effort up** (Median saving against gzip 6 on the same homepage HTML, by codec and level · Node.js zlib · n = 7,435 homepages · 95% bootstrap intervals)

| Item | Value | 95% interval | n |
| --- | --- | --- | --- |
| gzip 1 | -18% | -18%–-18% | 7,435 |
| gzip 9 | 0.7% | 0.7%–0.7% | 7,435 |
| Brotli 1 | -10% | -10%–-10% | 7,435 |
| Brotli 5 | 10% | 9.9%–10% | 7,435 |
| Brotli 9 | 12% | 12%–12% | 7,435 |
| Brotli 11 | 20% | 20%–20% | 7,435 |
| zstd 1 | -6.9% | -7%–-6.8% | 7,435 |
| zstd 3 | -2.4% | -2.6%–-2.3% | 7,435 |
| zstd 9 | 6.4% | 6.2%–6.5% | 7,435 |
| zstd 19 | 11% | 11%–11% | 7,435 |

Source: Outofplace benchmark on the census of 24 Sept 2026. Chart: https://www.outofplace.space/data/blog/http3-compression-polish-web/charts/en/chart-brotli-shrinks-polish-homepages-more-than-gzip-and-more-than-zst.png Data: https://www.outofplace.space/data/blog/http3-compression-polish-web/2026-09-24/codecs.csv

Against gzip, Brotli wins on size at every level. Against zstd it wins from mid effort up (Brotli 5 beats zstd 9, Brotli 9 beats zstd 19); at the fast end, zstd 1 and 3 make smaller files than Brotli 1 and make them faster. At level 5, Apache's default for dynamic content, the median homepage is 10% smaller than with gzip 6; at level 11, the slowest, 20%. Turning gzip up from 6 to 9 gains almost nothing: 0.7%.

### Is Brotli faster than gzip? Does zstd beat it?

Speed is where the codecs part ways. The table has the speed of each level on a seeded sample of 400 homepages, one at a time on one thread (Apple silicon, Node.js zlib; the sizes don't depend on the machine, the speeds do).

Zstandard's case is speed, not size. At its default level 3 it made the median homepage no smaller than gzip 6 did (a "saving" of -2.4%, so slightly larger; across all bytes together 3.4%), but it compressed at 568.1 MB/s; Brotli 5 saves 10% at 106.3 MB/s. Brotli 11 is a level for files compressed once and stored, not for HTML made on every request: it ran at 1 MB/s.

## What the servers actually send

The recompression also shows how hard each server compressed. For homepages that came with gzip, we compared the bytes on the wire with what gzip makes of the same HTML at levels 1 and 6.

13% of the gzip homepages were sent at least as large as gzip level 1 makes them, the setting nginx uses unless told otherwise (`gzip_comp_level 1`). Moving all the gzip homepages to Brotli 5 would save a median 11% of the bytes they send now, about 2.4 kB per homepage view. The zstd homepages, almost all behind Cloudflare, gain about as much: Brotli 5 would take a median 12% off what they send, because zstd as served is about the size of gzip 6. For the homepages sent with no compression, the gain is much larger: the median one weighs 42 kB on the wire, and Brotli 5 would take 78% off it.

## Is HTTP/3 faster than HTTP/2?

Our data can't measure that: we know which sites advertise HTTP/3, not which visits used it. What we can show is context from real Chrome users. The Chrome UX Report has a phone TTFB (time to first byte) for 6,076 of the sites, from the 28 days to 22 September 2026, which the third-party scripts study fetched for the same origins.

**Behind Cloudflare, sites with HTTP/3 have the lower phone TTFB; without a CDN there is no gap** (Median of the origins' TTFB p75 on phones, in seconds, by CDN and whether HTTP/3 is advertised · CrUX, 26 Aug to 22 Sept 2026 · 95% bootstrap intervals)

| Item | Value | Range | n |
| --- | --- | --- | --- |
| Cloudflare, HTTP/3 advertised | 0.72s | 0.68s–0.76s | 1,656 |
| Cloudflare, not advertised | 0.82s | 0.79s–0.9s | 519 |
| No CDN, HTTP/3 advertised | 0.76s | 0.72s–0.82s | 651 |
| No CDN, not advertised | 0.76s | 0.74s–0.78s | 2,977 |
| LiteSpeed with HTTP/3, no CDN | 0.75s | 0.7s–0.82s | 453 |
| nginx or Apache without HTTP/3, no CDN | 0.78s | 0.75s–0.81s | 2,272 |

Source: Chrome UX Report (Google, CC BY 4.0); Outofplace census, 24 Sept 2026. Chart: https://www.outofplace.space/data/blog/http3-compression-polish-web/charts/en/chart-behind-cloudflare-sites-with-http-3-have-the-lower-phone-ttfb-wi.png Data: https://www.outofplace.space/data/blog/http3-compression-polish-web/2026-09-24/ttfb.csv

The two groups disagree. Behind Cloudflare, sites advertising HTTP/3 have a lower median TTFB than those that don't: 717ms against 819ms. Without a CDN there is no gap: 763ms with HTTP/3 advertised, 759ms without. If the protocol alone set TTFB, both groups would show it. Cloudflare sites that don't advertise HTTP/3 may differ in their plan, caching or origin server too, which the headers don't show. We read the chart as context, not as an effect of HTTP/3.

## Shop platforms: the platform decides for the shop

For online shops, the platform runs the server, so the shop owner's choice is the platform. We recognised the platforms with the classifier from [our study of Core Web Vitals by shop platform](https://www.outofplace.space/blog/core-web-vitals-polish-ecommerce). Hosted platforms that run on their own servers show it most plainly.

Shopify shops sit behind Cloudflare and get both. Almost all IdoSell shops in the sample (all but a handful) answered from nginx with gzip and no HTTP/3. Shoper shops are split by whether they sit behind Cloudflare, and the open-source platforms (PrestaShop, WooCommerce) by their host.

## How to enable HTTP/3 and Brotli

**1. Check what your site sends now.**
Ask for the page the way a browser does and read the headers:

```sh
curl -sI -H 'Accept-Encoding: zstd, br, gzip' https://www.example.pl/ | grep -iE '^(content-encoding|alt-svc|server|cf-ray):'
```

`content-encoding: br` or `zstd` means modern compression is on; an `alt-svc` line with `h3` means HTTP/3 is advertised. In Chrome DevTools, the Network panel's Protocol column shows `h3` on requests that used it.

**2. Behind Cloudflare, turn on the switch.**
HTTP/3 is a toggle in the dashboard (Speed, Settings, Protocol Optimization), available on every plan per [Cloudflare's HTTP/3 documentation](https://developers.cloudflare.com/speed/optimization/protocol/http3/). Compression follows the plan's default; a compression rule can change it.

**3. On LiteSpeed, open UDP port 443.**
LiteSpeed's documentation says QUIC is on by default; it needs UDP port 443 open and a trusted certificate. Ask your host when `alt-svc` is missing.

**4. On nginx, build in HTTP/3 and add Brotli.**
Build nginx 1.25 or later with `--with-http_v3_module`, add `listen 443 quic reuseport;` next to the TLS listener and send `Alt-Svc: h3=":443"; ma=86400`. Brotli needs a module outside the core. If you stay on gzip, raise `gzip_comp_level` from its default of 1 to 5 or 6 and list your text types in `gzip_types`.

**5. On Apache, enable mod_brotli and put a CDN in front for HTTP/3.**
`AddOutputFilterByType BROTLI_COMPRESS text/html text/css text/javascript application/javascript` turns on Brotli for text. Apache has no HTTP/3, so a CDN or a proxy that speaks it is the way to offer it.

**6. Keep gzip, and send Vary.**
Not every client asks for Brotli or zstd. Keep gzip as the fallback and send `Vary: Accept-Encoding`, so caches keep one copy per encoding. 13% of the compressed homepages in our sample didn't send it.

## How we measured

The sites come from our census of 24 September 2026 by `OutofplaceResearchBot` (see [what our crawler fetches and how to block it](https://www.outofplace.space/bot)), which reads robots.txt first and fetches only the homepage: 8,023 of the 9,208 .pl domains in the Tranco list answered with HTML, and 7,785 distinct sites remained after merging domains that redirect to the same address. For each, we read the headers of the final response: `Alt-Svc`, parsed as RFC 7838 writes it, counted as HTTP/3 when it names the `h3` token; `Content-Encoding`, after a request with `Accept-Encoding: zstd, br, gzip`; the CDN, from headers such as `cf-ray`; and the web server family from `Server`. The shop platform comes from the classifier of our Core Web Vitals study.

For the benchmark, the HTML of each homepage, as received, was compressed with Node.js's built-in zlib (gzip 1, 6, 9; Brotli 1, 5, 9, 11 in text mode; Zstandard 1, 3, 9, 19). A homepage counts as sent "at least as large as gzip 1" when it is within 0.5% of that size or above. Sizes are deterministic; speeds come from a seeded sample of homepages compressed one at a time with nothing else running in the script. The phone TTFB is the 75th percentile of each origin in the Chrome UX Report; the chart shows the median of those values per group.

One response per site: the homepage, on 24 September 2026, from one machine in Poland. Images, scripts and style sheets may be compressed differently, and a server may answer browsers differently from our crawler, for instance by preferring the first encoding a browser lists. `Alt-Svc` is an advertisement; a site may also announce HTTP/3 in a DNS HTTPS record, which the census didn't read, so the HTTP/3 share is a lower bound for sites that advertise it only there. The CDN and server come from headers a site can hide or rename, so "no CDN" means none showed. The TTFB comparison is a correlation across hosts, not a test of the protocol.

## Further reading

- [RFC 9114: HTTP/3](https://www.rfc-editor.org/rfc/rfc9114.html): The HTTP/3 standard, including how a server advertises it with Alt-Svc and when a client falls back to TCP.

- [Cloudflare: Content compression](https://developers.cloudflare.com/speed/optimization/content/compression/): Which encoding Cloudflare sends visitors on each plan: zstd on Free, Brotli on Pro and Business, gzip on Enterprise.

- [LiteSpeed: QUIC and HTTP/3 support](https://docs.litespeedtech.com/lsws/cp/cpanel/quic-http3/): Why HTTP/3 is on by default in LiteSpeed Web Server, and the open UDP port it needs.

- [nginx: Module ngx_http_v3_module](https://nginx.org/en/docs/http/ngx_http_v3_module.html): nginx's experimental HTTP/3 module, how to build it in and the Alt-Svc header it needs.

- [Core Web Vitals by ecommerce platform: who is fastest?](https://www.outofplace.space/blog/core-web-vitals-polish-ecommerce): Core Web Vitals of Polish online shops, by platform, from the Chrome UX Report.
