[Web-SIG] WSGI reason phrase optionality

Phillip J. Eby pje at telecommunity.com
Wed May 18 18:01:08 CEST 2005


These references should clear up the confusion; the space is explicitly 
required by both PEP 333 and by the HTTP specification:

http://www.python.org/peps/pep-0333.html#the-start-response-callable
http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1

With respect to vagueness in the PEP, I didn't say that the reason phrase 
could be empty, although I did cite the above RFC, which shows that 
Reason-Phrase is zero or more text characters.  However the PEP is 
absolutely unambiguous that the space must be present.

At 10:24 AM 5/18/2005 -0500, Ian Bicking wrote:
>Copying PJE...
>Allan Saddi wrote:
>>Hi Ian,
>>I just saw your comment on the CherryPy ticket I opened about the
>>optionality of the reason phrase in the first argument to
>>start_response(). PEP 333 is a bit vague on the matter, but after
>>looking at Phillip Eby's wsgiref, I do believe you're right. However,
>>there's a slight twist. Philip's reference start_response() makes the
>>following checks:
>>         assert type(status) is StringType,"Status must be a string"
>>         assert len(status)>=4,"Status must be at least 4 characters"
>>         assert int(status[:3]),"Status message must begin w/3-digit  code"
>>         assert status[3]==" ", "Status message must have a space  after 
>> code"
>>In other words, the reason phrase may be empty, but there must always
>>be a space after the status code. This interpretation is a tiny bit
>>stricter than what Paste's lint currently allows. (I don't remember
>>now, but I think I did run lint in between CherryPy and one of my
>>servers. Since my servers also do the above checks, I got a lot of
>>assertion failures because CherryPy often only passed a 3-digit string.)
>>Anyhow, should lint be changed to match? Is this even the correct
>>interpretation? I currently have no idea. :)
>
>I've never written any code that expects anything after the status code, 
>and I think it would be odd to do so.  I always write 
>int(status.split(None, 1)[0]), which is a little annoying but a reasonable 
>pattern.  I think it would also be valid to test that it was three 
>characters.  Otherwise I think Phillip's code is more restrictive than 
>necessary, though maybe lint could have multiple levels and emit a warning 
>in this case.



More information about the Web-SIG mailing list