[Web-SIG] Other kinds of environment variables

Mark Nottingham mnot at mnot.net
Fri Aug 27 00:57:17 CEST 2004

One thing that seems to be missing in WSGI to me is the communication 
of the delineation between what the server does and what the 
application does.

The latest drafts says;

In general, the server or gateway is responsible for ensuring that 
correct headers are sent to the client: if an application omits a 
needed header, the server or gateway *shoud* add it. [...] If the 
application supplies a header that the server would ordinarily supply, 
or that contradicts the server's intended behaviour [...] the server or 
gateway *may* discard the conflicting header, provided that its action 
is recorded for the benefit of the application author.

I'm a bit uncomfortable with this, because there's no standard way for 
the action to be "recorded for the benefit of the application author." 
IMO this is one of the major problems with CGI.

In other words, there's a laundry list of HTTP features that may or may 
not be handled by the server on behalf of the application, depending on 
how it's written and configured. Giving the application some idea of 
what it can expect the server to do, and how it will do it, would help 
application frameworks decide what tasks it needs to take on itself.

For example;

* HTTP auth - does the server make the Authentication header available? 
Automatically generate 401s when configured to require auth? If the 
application framework wishes to perform auth on its own, will it have 
the appropriate information available?
* chunked encoding - does the server chunk the body when appropriate?
* content-length - does the server automatically calculate it?
* cache validation - does the server handle If-Modified-Since and 
If-None-Match requests appropriately (e.g., with a 304)?
* content-encoding - does the server apply content-encoding in requests 
and/or responses as appropriate, and what schemes does it support?
* transfer-encoding - same as content-encoding

Some servers (e.g., CGI) may not be able to supply all of this 
information reliably, but others will, and it would be quite useful to 
frameworks to know the capabilities of the server in a generic fashion.

I know that this can be addressed by server-specific environment now, 
but I think there might be some low-hanging fruit for common functions 
like the ones above. It might be that they'd be better in a separate 
document, so they're not part of the 'core' WSGI, but I think there's 
real value in having some common ones.

Thoughts? If there's interest, I'll make a proposal.

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

More information about the Web-SIG mailing list