curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
The server reset an HTTP/2 stream
Seen in curl, libcurl (CURLE_HTTP2_STREAM), Git over HTTPS, PHP
The server or a proxy reset the HTTP/2 stream before the response completed; the code in brackets says why.
Common causes
- The server or proxy sent a response HTTP/2 forbids, such as a connection-specific header like Upgrade or Connection (PROTOCOL_ERROR).
- A proxy or load balancer cancelled a slow, large or streamed response because of a timeout or size limit (CANCEL or INTERNAL_ERROR).
- A buggy intercepting proxy or middlebox between client and server.
How to fix it
- Retry with --http1.1; if that works, the problem is in the server or proxy HTTP/2 handling.
- Run curl -v and look at the response headers just before the error for an invalid header.
- Remove connection-specific headers in the proxy config, and raise body size and timeout limits for large transfers.
Got a different message? Paste it into the error explainer.
Related errors
- curl: (18) transfer closed with outstanding read data remaining · The connection closed before the body finished
- curl: (22) The requested URL returned error · The server answered with an HTTP error status
- curl: (47) Maximum (50) redirects followed · curl stopped in a redirect loop
- unable to get local issuer certificate · The client can't find the certificate's issuer
- unable to verify the first certificate · The intermediate certificate is missing
- certificate has expired · The server certificate has expired
- self signed certificate in certificate chain · The chain ends in an untrusted root
- wrong version number · TLS spoken to something that isn't TLS
- curl: (6) Could not resolve host · The hostname doesn't resolve
- curl: (7) Failed to connect · The connection was refused or unreachable
- curl: (28) Operation timed out · The request timed out
- curl: (51) SSL: no alternative certificate subject name matches target host name · The certificate doesn't match the hostname