HTTP/2 custom status codes

Maxim Dounin mdounin at
Wed Aug 9 15:37:10 UTC 2017


On Wed, Aug 09, 2017 at 08:46:41PM +0530, Sharan J wrote:

> Hello,
> I am using Nginx as a reverse proxy and have enabled HTTP/2. For a
> particular request, my back-end server sends a custom 4 digit status code
> (say 9999).
> When connecting via HTTP/1.1, the exact status code is returned to the
> client but, when connection via HTTP/2, the response headers along with the
> status(9999) sent by my back-end server is sent in the body and the header
> has the status code 000.
> The same works fine if the custom status code is 3-digit (say 999). I know
> the standard is to use 3 digit status code but, why does Nginx sends the
> back-end server's response headers in the body? Please help me understand
> what exactly is happening.

When you return a 4-digit status code from your backend, nginx 
will fail to parse the HTTP response of the backend, and will 
assume that backend is using HTTP/0.9.  Something like this will 
be logged to the error log:

... [error] ... upstream sent no valid HTTP/1.0 header while reading response header from upstream ...

Since there are no headers in HTTP/0.9, everything returned by 
the backend will be considered to be a response body.

Maxim Dounin

More information about the nginx mailing list