You're running a local development server with HTTPS enabled, and Chrome suddenly throws ERR_SPDY_PROTOCOL_ERROR on every request. The page refuses to load, and the console offers little more than a cryptic error code. The error means Chrome and your server aren't agreeing on how to communicate. The fix usually lies in your TLS setup or proxy configuration.
What Is SPDY and Why Does This Error Occur?
SPDY is an old Google protocol that evolved into HTTP/2. Chrome still calls HTTP/2 connections "SPDY" internally, so this error is really about HTTP/2 handshake failures. It can appear on production sites, local development servers, or even in corporate networks. It's not a security vulnerability by itself, but it does indicate misconfigurations that affect availability and performance—both of which matter to developers and security-conscious users.
Common Causes

- Server misconfiguration: Incorrect TLS settings, invalid certificates, or mismatched HTTP/2 support on the server side. For example, an old Nginx version that doesn't support ALPN on OpenSSL 1.0.2 can trigger this.
- Reverse proxy or load balancer issues: Proxies that downgrade or incorrectly handle HTTP/2 frames (e.g., Nginx, Apache, HAProxy).
- Browser extensions: Extensions that intercept network traffic (ad blockers, VPN clients, security suites) can corrupt SPDY frames.
- Corrupted cache or cookies: Stale cached data for a specific domain may contain invalid protocol metadata.
- Antivirus or firewall software: SSL inspection features that modify HTTPS traffic without proper HTTP/2 awareness.
- Outdated or experimental Chrome flags: Enabling
chrome://flagsoptions related to QUIC or SPDY can cause instability.
Most cases boil down to a simple misconfiguration—but you need to pinpoint the exact cause.
Diagnostic Steps
Start by isolating the problem. Use Chrome's built-in developer tools and safe network diagnostics:
- Check the Network tab in DevTools (F12). Look at the failed request's "Protocol" column. If it shows
h2orspdy/3.1, the error is protocol-related. Inspect the response headers forX-Firefox-SpdyorAlt-Svchints. - Test in an incognito window. Disable all extensions and see if the error persists. If it disappears, an extension is the culprit.
- Clear the SSL state and cache. Go to
chrome://settings/clearBrowserData, select "Cached images and files" and "Cookies and other site data", then restart Chrome. - Use a different browser. Firefox or Edge may handle HTTP/2 differently; if they work, the issue is Chrome-specific.
- Test with a direct IP or different network. Bypass proxies by connecting to the server via its IP address or switching to a mobile hotspot.
One quick check: open an incognito window. If the error disappears, you've already narrowed it down to extensions or cached data.
Fixes for Developers
Server-Side Adjustments
If you control the server, review your TLS configuration. Use a valid certificate—self-signed ones work locally but require adding them to Chrome's trust store (tools like mkcert can automate this). For Apache or Nginx, confirm that HTTP/2 is enabled and that you aren't forcing a downgrade to HTTP/1.1. Check your server logs for ALPN negotiation errors—they often reveal the exact protocol mismatch.
Proxy and Firewall Configurations
Corporate environments often use SSL inspection proxies that rewrite HTTP/2 frames. If you can't disable the proxy, ask your network administrator to add your development domain to the bypass list. On your local machine, temporarily disable antivirus HTTPS scanning to rule it out.
Chrome Flags and Settings
Navigate to chrome://flags and reset all flags to default. Pay special attention to "Experimental QUIC" and "Enable SPDY/4" if they are enabled—set them to "Disabled". Then restart Chrome.
Clear Host Cache
Chrome maintains an internal host cache for DNS and protocol information. Clear it by visiting chrome://net-internals/#dns and clicking "Clear host cache". Then go to chrome://net-internals/#sockets and click "Flush socket pools".
Preventive Measures for Developers
To avoid ERR_SPDY_PROTOCOL_ERROR in the future, adopt these practices:
| Area | Action |
|---|---|
| TLS Configuration | Use modern TLS 1.2 or 1.3; disable TLS 1.0/1.1. |
| HTTP/2 Support | Verify ALPN negotiation with tools like openssl s_client -alpn h2. |
| Local Development | Use a trusted self-signed certificate or a tool like mkcert to avoid certificate warnings. |
| Extension Hygiene | Regularly audit installed extensions; remove any that modify network traffic unless absolutely necessary. |
| Testing Environments | Set up a clean Chrome profile for development to isolate configuration changes. |
Check your server's error log for the exact ALPN string that Chrome is offering. On Nginx, look for ssl_alpn directives; on Apache, ensure Protocols h2 http/1.1 is set. Matching the protocol list between client and server eliminates the most common source of SPDY errors.
