HTTP status codes missing description in header for proxy_pass

kgoess nginx-forum at nginx.us
Mon Jun 3 23:07:50 UTC 2013


We're using nginx as a middle layer in front of our application server
(mod_perl).  When mod_perl returns an error page, the HTTP status line is
missing the "reason phrase" after the status code, like "Not Found", e.g.

HTTP/1.1 404
Server: nginx/1.2.1
...etc

should be

HTTP/1.1 404 Not Found
...etc...

AFAICT, the HTTP spec requires at least a space after the status code:

---------------------------------------------
  http://www.w3.org/Protocols/rfc1945/rfc1945
  The first line of a Full-Response message is the Status-Line,
   consisting of the protocol version followed by a numeric status code
   and its associated textual phrase, with each element separated by SP
   characters. No CR or LF is allowed except in the final CRLF sequence.

       Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

   Since a status line always begins with the protocol version and
   status code

       "HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP

   (e.g., "HTTP/1.0 200 "),
---------------------------------------------

       Reason-Phrase  = *<TEXT, excluding CR, LF>

---------------------------------------------

The reason we noticed is that putting Perlbal in front of nginx got the
status rejected, since Perlbal is written to strictly follow the spec:

------------------------------------------------
return fail("Bogus response line") unless
            $self->{responseLine} =~
m!^HTTP\/(\d+)\.(\d+)\s+(\d+)(?:\s+(.*))$!;
------------------------------------------------

Is this a bug in nginx, or a configuration issue that we can fix? The patch
to Perlbal is simple enough, is it worth looking for a patch to nginx? Or
did we miss something else entirely?

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,239811,239811#msg-239811



More information about the nginx mailing list