HTTP/2 Support Test |
HTTP/2 Test — Check Your Web Server's Protocol Version
HTTP/2 test verifies whether a web server supports the HTTP/2 protocol (RFC 9113) by checking Application-Layer Protocol Negotiation (ALPN, RFC 7301) during a TLS handshake on port 443. The server announces its supported protocols in the TLS ClientHello — if h2 is present, HTTP/2 is active for that connection. Results include the negotiated protocol version and the full set of HTTP response headers returned by the server.
| Property | Value |
|---|---|
| Protocol standard | RFC 9113 (supersedes RFC 7540, 2022) |
| Originally standardized | 2015 by the IETF |
| Negotiation mechanism | ALPN — Application-Layer Protocol Negotiation (RFC 7301) |
| Transport layer | TCP — HTTPS port 443 |
| Browser requirement | HTTPS required — all major browsers enforce h2 over TLS only |
| Global adoption (2025) | ~77% of websites (W3Techs) |
How to Test HTTP/2 Support
Enter a domain name to test whether its web server negotiates HTTP/2 during the TLS handshake on port 443.
Run the HTTP/2 Test
Interpret the Protocol Result
HTTP/1.1 vs HTTP/2 vs HTTP/3 — Protocol Comparison
HTTP/2 is the second of three major HTTP versions currently in active use. The table below covers the technical differences across all three — the features HTTP/2 added over HTTP/1.1, and what HTTP/3 improves further.
| Feature | HTTP/1.1 (RFC 9112) | HTTP/2 (RFC 9113) | HTTP/3 (RFC 9114) |
|---|---|---|---|
| Year standardized | 1997 | 2015 | 2022 |
| Transport | TCP | TCP | QUIC over UDP (RFC 9000) |
| Multiplexing | No — one request per connection | Yes — concurrent streams over one TCP connection | Yes — independent streams over QUIC |
| Header compression | None | HPACK | QPACK |
| Head-of-line blocking | Yes — TCP and HTTP level | Partial — TCP-level blocking remains | Eliminated — QUIC streams are independent |
| Encryption | Optional | Effectively required (browsers enforce HTTPS) | Required — TLS 1.3 embedded in QUIC |
| Protocol negotiation | Upgrade header (rarely used) | ALPN extension in TLS handshake (RFC 7301) | Alt-Svc header from HTTP/2 response |
| Framing format | Text-based | Binary frames | Binary frames over QUIC |
How HTTP/2 Negotiation Works via ALPN (RFC 7301)
HTTP/2 support is detected via Application-Layer Protocol Negotiation (ALPN), a TLS extension defined in RFC 7301. ALPN allows the client and server to agree on an application protocol during the TLS handshake — before any HTTP data is exchanged — with zero additional round trips.
- TLS ClientHello — The client includes an ALPN extension listing supported
protocols, typically
["h2", "http/1.1"], in priority order. - TLS ServerHello — The server selects a protocol from the client's list
and returns it in the ALPN extension of its ServerHello. If it selects
h2, HTTP/2 is active from the first request without any additional negotiation. - h2 vs h2c —
h2refers to HTTP/2 over TLS (ALPN-negotiated).h2crefers to HTTP/2 over unencrypted TCP. All major browsers reject h2c — encrypted HTTP/2 via ALPN is the only practical deployment. - HTTP/3 advertisement — Once connected via HTTP/2, servers that also
support HTTP/3 advertise it via the
Alt-Svc: h3=":443"response header. Browsers cache this and upgrade to HTTP/3 (QUIC, RFC 9000) on subsequent visits.
Do it yourself
How to Enable HTTP/2 on Your Web Server
HTTP/2 requires a valid TLS certificate and server software configured to advertise
h2 in the ALPN extension. The configuration required differs by server software.
Server Nginx
server {
listen 443 ssl http2;
ssl_certificate /etc/ssl/certs/your-domain.crt;
ssl_certificate_key /etc/ssl/private/your-domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
}
Server Apache (requires mod_http2)
LoadModule http2_module modules/mod_http2.so
<VirtualHost *:443>
Protocols h2 h2c http/1.1
SSLEngine on
SSLCertificateFile /etc/ssl/certs/your-domain.crt
SSLCertificateKeyFile /etc/ssl/private/your-domain.key
</VirtualHost>
Server Caddy
your-domain.com {
# HTTP/2 is enabled by default — no directive required
}
Cloud CDN and Cloud Platforms
Cloudflare, AWS CloudFront, Fastly, Bunny.net, Netlify, and Vercel enable HTTP/2 automatically for all proxied domains. No server configuration is required. Confirm status in the provider dashboard under TLS or Performance settings.
Do it yourself
How to Test HTTP/2 Without an Online Tool
HTTP/2 support can be verified from any terminal. curl ships with Windows 10+,
macOS, and all Linux distributions. openssl provides direct ALPN inspection
without making an HTTP request.
Windows Command Prompt or PowerShell
curl.exe -I --http2 https://google.com -w "\nHTTP version: %{http_version}\n"
Mac / Linux curl
curl -I --http2 https://google.com -w "\nHTTP version: %{http_version}\n"
A response status line of HTTP/2 200 confirms HTTP/2 support.
A HTTP/1.1 200 response confirms the server uses HTTP/1.1 only.
Inspect ALPN Negotiation Directly — OpenSSL
openssl s_client -connect google.com:443 -alpn h2 2>/dev/null | grep "ALPN"
Output of ALPN protocol: h2 confirms the server accepted the HTTP/2
ALPN token. Output of No ALPN negotiated or
ALPN protocol: http/1.1 means HTTP/2 is not supported.
The online tool tests from a neutral external server — results may differ from your local terminal if a CDN, WAF, or load balancer intercepts TLS before it reaches the origin server.
Common Uses for HTTP/2 Testing
A web performance engineer migrating a high-traffic e-commerce site from Apache to Nginx
runs an HTTP/2 test post-migration and receives NOT SUPPORTED. The Nginx configuration
has TLS enabled but is missing the http2 flag on the listen directive.
Adding listen 443 ssl http2; and reloading Nginx resolves the test immediately,
restoring the multiplexed connection behaviour that was active on the previous CDN layer.
A DevOps engineer deploying a new API behind an AWS Application Load Balancer checks HTTP/2 support and finds the ALB is returning HTTP/1.1 to external clients. The root cause is that the ALB listener protocol is set to HTTP/1.1 for the backend target group. Switching the target group protocol version to HTTP/2 in the ALB configuration restores end-to-end HTTP/2 negotiation between client and origin.
An SEO consultant verifying Core Web Vitals improvements for a client discovers the apex domain (without www) returns NOT SUPPORTED while the www subdomain returns SUPPORTED. The split is caused by different CNAME routing paths through the CDN — the apex domain's A record routes directly to the origin server with no CDN proxy, where HTTP/2 was not configured at the Nginx level.