ok, I digged more, and sadly I think that for problem 1) HTTP should be rewritten, or at least a new class should be extended to let more flexibility.
Don't know if I'm boring some ultra-technical pythonist, but I'll try to explain what I managed to understand. this is how HTTP is defined in http.py : class HTTP(BaseException): def __init__( self, status, body='', **headers ): bla bla bla basically, every extra argument passed get transformed to a dict and passed along with the function. eg. HTTP(401,['hello'],foo='bar', bar='foo') ---> HTTP(401, ['hello'],dict(foo='bar',bar='foo')) --> __init__ done Now, the hard part: dict() only allow "keyword" syntax for the keys, and that will be in our case the various headers "name", while their values should be header content. Unfortunately, keywords accept letters, digit and underscore.... no dash. In fact: ************** python > a= dict(foo='bar',bar='foo') > a= dict(foo_1='bar',bar='foo') > a= dict(foo-1='bar',bar='foo') SyntaxError: keyword can't be an expression ************** So, we can't actually pass any header to HTTP() without interfering with dict() call that gets called on **headers if our keyword contains '-' . That eliminates a LOT of standard headers and make HTTP quite unuseful... I can't get the reason behind this wasn't a problem for peoples writing APIs or services.... Another question popped: can we use response.status and response.headers ? It seems that if my controller function return anything (string, list or dict) the status is always 200 and no added headers show up in firebug....