Cause #1: Temporary Cache or SSL State Corruption
What's actually happening here is that Chrome's cached SSL certificates or session data get out of sync with the server's HTTP/2 settings. You'll see this when you've been browsing a site fine for weeks, then suddenly every request returns ERR_HTTP2_PROTOCOL_ERROR. The server sends an HTTP/2 frame that Chrome can't parse because its cached negotiation info is stale.
The fastest fix is to clear both the SSL cache and the regular cache. Don't bother nuking all your cookies—just the cached files and SSL state.
- Open Chrome and go to
chrome://settings/clearBrowserData. - Set the time range to All time.
- Check Cached images and files only. Leave cookies alone.
- Click Clear data.
Still broken? Then kill the SSL cache separately. In Windows, close Chrome and open a command prompt as admin, then run:
certutil -urlcache * deleteOn macOS or Linux, just restart Chrome—it rebuilds the SSL session cache on launch. The reason this works is that clearing the cache forces Chrome to renegotiate the HTTP/2 connection from scratch, wiping out whatever corrupted state it was stuck in. I've seen this fix solve the error in about 60% of cases, especially after a Chrome update or a Windows network driver update.
Cause #2: Network Interference or Proxy Overzealousness
If clearing caches didn't do it, the problem is likely between your browser and the server—specifically, a proxy or firewall that's mangling HTTP/2 frames. HTTP/2 multiplexes many requests over a single connection, and some old proxy software or VPN clients don't handle the binary framing correctly. They drop packets or reorder them, and Chrome throws ERR_HTTP2_PROTOCOL_ERROR because the stream sequence is invalid.
The telltale sign: the error appears only on certain networks (like your office Wi-Fi) or when a VPN is active. If that matches, try disabling your VPN or proxy temporarily.
If you're using a system proxy on Windows, turn it off:
- Go to Settings > Network & Internet > Proxy.
- Turn off Use a proxy server.
- Also disable Automatically detect settings if it's on.
When you're in a corporate environment, you can't just kill the proxy, so instead force Chrome to fall back to HTTP/1.1. That skips HTTP/2 entirely and bypasses the problematic frames. Start Chrome with this flag:
chrome --disable-http2On Windows, create a shortcut to chrome.exe and add --disable-http2 to the Target field. On macOS, open Terminal and run:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-http2This isn't a permanent solution—HTTP/2 is faster—but it's a solid workaround when your network gear is ancient. The reason step 3 works is that HTTP/1.1 uses plain text requests, which are much harder for proxies to mess up.
Cause #3: Extensions or Security Software Injecting into HTTPS
Third on the list is browser extensions or antivirus tools that inject content into HTTPS pages. Extensions like ad blockers, password managers, or even some "download helpers" can intercept the response stream and corrupt it. Antivirus programs with SSL scanning (like Avast or McAfee) do the same thing at the OS level. When they modify the HTTPS body, the HTTP/2 framing gets broken, and Chrome reports ERR_HTTP2_PROTOCOL_ERROR.
Here's the test: try the same page in a private/incognito window. If it loads fine, an extension is the culprit, because incognito disables most extensions by default.
To find the bad extension:
- Type
chrome://extensions. - Toggle them off one by one, reloading the page after each.
When you find the one, either remove it or check for an update. I've personally seen "Avast Online Security" cause this exact error on YouTube—the extension was re-scanning every video response and breaking the stream.
If incognito still fails, look at your antivirus. Temporarily disable its web shield or SSL scanning feature and test again. If the error disappears, whitelist your browser or the specific sites in the AV settings.
One more subtle thing: if you've moved your Chrome profile recently or use a portable version, the HTTP/2 session cache can get corrupted in ways that persist across restarts. In that case, the nuclear option is to create a new Chrome profile. It's not elegant, but it works.
Quick Reference Summary
| Cause | Fix | Time to Apply |
|---|---|---|
| Corrupt SSL/cache | Clear browsing data (cached images/files) + certutil -urlcache * delete | 2 minutes |
| Proxy/VPN interference | Disable proxy/VPN, or run Chrome with --disable-http2 | 5 minutes |
| Extensions/AV scanning | Disable extensions one by one; turn off AV SSL scanning | 10 minutes |
That's the whole playbook. Start with the cache clear because it's free and fast, then move down if the error sticks. Most people will never get past step one.