[Web-SIG] PEP 333 (19-Sep-04) Feedback

Mark Nottingham mnot at mnot.net
Wed Sep 29 02:24:59 CEST 2004


Overall, this PEP looks really good; these comments are mostly nits and 
editorial points to make it more precise, clear, etc.

* In "Specification Details," the start_response callable has 
illustrative arguments of "status" and "headers." It would be *very* 
helpful if the latter were called "response_headers," for clarity.

* The same section later states "The application object must return an 
iterable yielding strings." Return when? We're cautioned that the 
write() callable should not be used; how is the iterable returned, 
then?

* Later, "The server or gateway must not modify supplied strings in any 
way..." This effectively rules out the server/gateway implementing 
transfer-encodings, range requests, delta encoding, automatic content 
encoding, etc. Suggest dropping this paragraph; it doesn't really add 
any value, as servers that are malicious or incorrect in this respect 
won't really be stopped by it anyway.

* In "environ Variables," it is specified that "In general, a server or 
gateway should attempt to provide as many other CGI variables as are 
applicable, including e.g. the nonstandard SSL variables such as 
HTTPS=on , if an SSL connection is in effect." This sentence hedges in 
four different ways; "In general," "should," "attempt," "as many... as 
are applicable." Besides the redundancy, I'm concerned about the 
inclusion of nonstandard variables; how will people know which ones to 
include? I'd suggest listing those that aren't in the CGI standard, so 
there's an even playing field.

* Later in the same section, a construct called a 'stream' is defined. 
It would be good to directly relate this to a 'file-like object,' for 
the benefit of readers familiar with the terms used in the 
documentation of Python's standard library.

* The same section defines a number of environment variables with 
Boolean values (e.g., wsgi.multithread). When these definitions say 
"This value should be true if..." does it mean that they should be a 
Python types.BooleanType, or that it should evaluate to true (e.g., if 
wgsi.multithread: ...)?

* In 'Input and Error Streams', item 4 in the numbered list of notes to 
the table says 'Since the errors stream may not be rewound, a 
container..." This is the first instance of the term 'container'; could 
an existing term be used?

* In "The start_response() Callable", it says "The status argument is 
an HTTP "status" string like "200 OK" or "404 Not Found." This should 
reference the definition of status strings in the specification; 
suggest "The status argument is a string consisting of a Status-Code 
and a Reason-Phrase, in that order and separated by a single space, 
with no surrounding whitespace or other characters. See RFC2616, 
Section 6.1.1 for more information."

* In the next paragraph, "Each header_name must be a valid HTTP header 
name." For the same reasons as above, suggest "Each header_name must be 
a HTTP header field-name, as defined in RFC2616 Section 4.2."

* In the next paragraph, "If the application omits a needed header, the 
server or gateway should add it." Who determines whether it's needed? 
Suggest "If the application omits a header required by HTTP or other 
relevant
specifications in effect, the server or gateway must add it." (note 
must, not should)

* The next paragraph is confusingly worded; I'd suggest "The server or 
gateway must not actually transmit the HTTP headers until the first 
write call, or until after the first iteration of the application 
return value that yeilds a non-empty string...."

* "Buffering and Streaming," is, again, confusing about when an 
iterator is supposed to be returned.

* Finally, "Other HTTP Features" states that "In a sense, a server 
should consider itself to be like an HTTP 'proxy server'..." This isn't 
a good analogy; the function it performs is much closer to an HTTP 
gateway; See the terminology section of RFC2616.

Cheers,

--
Mark Nottingham     http://www.mnot.net/



More information about the Web-SIG mailing list