HTTP/2 works in Chrome 41+, Edge 12+, Firefox 36+, Safari 11+ on macOS, Safari 9+ on iOS, Opera 28+, and Samsung Internet 4+. Learn HTTP/2 browser support and quirks.

Prince Dewani
May 1, 2026
HTTP/2 is a major revision of the Hypertext Transfer Protocol, standardized by the IETF as RFC 7540 and updated as RFC 9113. It supports Chrome 41+, Edge 12+, Firefox 36+, Safari 11+ on macOS and Safari 9+ on iOS, Opera 28+, Samsung Internet 4+, and Android Browser 147+, while Opera Mini and Internet Explorer 10 and earlier never added support.
This guide covers what HTTP/2 is, the browsers that support it, the protocol's key features, how it differs from HTTP/1.1, how to check if a browser is using HTTP/2, and the known issues to plan around.
HTTP/2 is a major revision of the Hypertext Transfer Protocol that the IETF HTTP Working Group standardized in RFC 7540 and updated in RFC 9113. It evolved from Google's experimental SPDY project and replaces HTTP/1.1's plain-text framing with a binary protocol that adds multiplexing, header compression with HPACK, and stream prioritization. The protocol keeps the same methods, status codes, URIs, and header fields as HTTP/1.1, so existing web applications work without code changes.
All major browsers support HTTP/2 by default, but only over TLS. Chrome 41, Edge 12, Firefox 36, Safari 11 on macOS, Safari 9 on iOS, Opera 28, Samsung Internet 4, and Android Browser 147 enable HTTP/2 out of the box, while Opera Mini and Internet Explorer 10 and earlier never added support.
Chrome supports HTTP/2 by default from Chrome 41 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 4 to 40 used the SPDY predecessor and did not support HTTP/2. The browser only negotiates HTTP/2 over TLS, so HTTP/2 is automatic on every HTTPS site whose server advertises it through ALPN.
Microsoft Edge supports HTTP/2 by default from Edge 12 on Windows 10 and later. Every Edge release, including the legacy EdgeHTML versions and the modern Chromium-based releases, ships with HTTP/2 enabled. Like Chrome, Edge only negotiates HTTP/2 over HTTPS connections.
Firefox supports HTTP/2 by default from Firefox 36 on Windows, macOS, Linux, and Android. Firefox 35 and earlier did not support the protocol. Mozilla removed HTTP/2 server push from Firefox starting in Firefox 132 because most sites moved to preload links and 103 Early Hints. The Necko networking library handles HTTP/2 negotiation in C++.
Safari supports HTTP/2 by default from Safari 11 on macOS and from Safari 9 on iOS and iPadOS. Safari 9.1 to 10.1 on macOS shipped a partial implementation that handled most flows, and Safari 8 and earlier did not support HTTP/2. WebKit handles HTTP/2 in the network stack, so apps that use WKWebView inherit the same behavior.
Opera supports HTTP/2 by default from Opera 28 on desktop and from Opera Mobile 80 on Android. Opera Mini does not support HTTP/2 because the browser routes traffic through Opera's compression proxy, which still terminates connections as HTTP/1.1.
Samsung Internet supports HTTP/2 by default from Samsung Internet 4 on Galaxy phones and tablets. Every modern Samsung Internet release inherits the Chromium HTTP/2 stack, so the negotiation behavior matches Chrome on Android.
Chrome for Android supports HTTP/2 by default from Chrome 41 on Android 4.1 and later, and the modern stock Android Browser ships HTTP/2 from version 147. Earlier AOSP browsers did not support HTTP/2. Android WebView inherits the Chromium HTTP/2 implementation.
Internet Explorer 11 supports HTTP/2 only on Windows 10 and Windows 8.1, and the implementation is partial. Internet Explorer 10 and earlier never added HTTP/2 support, and Microsoft has retired Internet Explorer 11. Sites that still receive IE 11 visits automatically fall back to HTTP/1.1.
HTTP/2 keeps every HTTP/1.1 verb and header but rewires how the protocol moves bytes on the wire. Five features carry most of the performance win.
HTTP/2 keeps the same request, response, and header model as HTTP/1.1 but rewires the transport. The table below compares the two on the dimensions that change real performance and shipping decisions.
| Dimension | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Message format | Plain text | Binary frames |
| Connections per origin | 6 to 8 parallel TCP connections | One multiplexed TCP connection |
| Multiplexing | Sequential requests, head-of-line blocking | Many streams in flight at once |
| Header compression | None | HPACK with Huffman codes |
| Stream priority | Not defined in the protocol | Weight and dependency tree per stream |
| Server push | Not supported | Defined in spec, removed by browsers in practice |
| Encryption | Optional | Required by every browser implementation |
| RFC | RFC 9112 | RFC 9113 |
Note: HTTP/2 negotiation breaks across browsers, networks, and proxies. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
The fastest check is the DevTools Network panel. Right-click the column headers, enable the Protocol column, and reload the page. Resources served over HTTP/2 list h2 in that column. For automated checks across pages, the PerformanceResourceTiming API exposes nextHopProtocol with the same value.
Paste this snippet into any browser DevTools console after the page finishes loading to count how many resources used HTTP/2, HTTP/3, or HTTP/1.1.
// Run in any browser DevTools console after the page finishes loading.
// PerformanceResourceTiming reports the protocol the browser negotiated.
const entries = performance.getEntriesByType("resource");
const counts = { "h2": 0, "h3": 0, "http/1.1": 0, "other": 0 };
for (const entry of entries) {
const proto = entry.nextHopProtocol;
if (proto in counts) {
counts[proto] += 1;
} else {
counts.other += 1;
}
}
console.log("Protocol counts on this page:", counts);
const total = entries.length || 1;
console.log("HTTP/2 share:", ((counts["h2"] / total) * 100).toFixed(1) + "%");
// HTTP/2 reports as "h2" in nextHopProtocol when ALPN selected it.
// HTTP/1.1 reports as "http/1.1", and HTTP/3 reports as "h3".If every resource reports http/1.1 instead of h2, the server is not advertising HTTP/2 over ALPN, the site is being served over plain HTTP, or a corporate proxy is downgrading the connection. Browsers never speak HTTP/2 in clear text on the open web.
HTTP/2 is mature and ships in every modern browser, but the protocol still has rough edges that affect production traffic. Plan for these before you treat HTTP/2 as a finished problem.
All HTTP/2 version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance