Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 356

Show
Ignore:
Timestamp:
06/22/05 00:01:47
Author:
fumanchu
Message:

Implements ticket #172 (order response headers).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/_cphttptools.py

    r355 r356  
    368368    return cpg.response.status 
    369369 
     370 
     371general_header_fields = ["Cache-Control", "Connection", "Date", "Pragma", 
     372                         "Trailer", "Transfer-Encoding", "Upgrade", "Via", 
     373                         "Warning"] 
     374response_header_fields = ["Accept-Ranges", "Age", "ETag", "Location", 
     375                          "Proxy-Authenticate", "Retry-After", "Server", 
     376                          "Vary", "WWW-Authenticate"] 
     377entity_header_fields = ["Allow", "Content-Encoding", "Content-Language", 
     378                        "Content-Length", "Content-Location", "Content-MD5", 
     379                        "Content-Range", "Content-Type", "Expires", 
     380                        "Last-Modified"] 
     381 
     382_header_order_map = {} 
     383for _ in general_header_fields: 
     384    _header_order_map[_] = 0 
     385for _ in response_header_fields: 
     386    _header_order_map[_] = 1 
     387for _ in entity_header_fields: 
     388    _header_order_map[_] = 2 
     389 
     390 
    370391def finalize(): 
    371392    """Transform headerMap + cookies into cpg.response.headers.""" 
     
    380401     
    381402    # Headers 
    382     cpg.response.headers = [] 
     403    headers = [] 
    383404    for key, valueList in cpg.response.headerMap.iteritems(): 
     405        order = _header_order_map.get(key, 3) 
    384406        if not isinstance(valueList, list): 
    385407            valueList = [valueList] 
    386408        for value in valueList: 
    387             cpg.response.headers.append((key, str(value))) 
     409            headers.append((order, (key, str(value)))) 
     410    # RFC 2616: '... it is "good practice" to send general-header fields 
     411    # first, followed by request-header or response-header fields, and 
     412    # ending with the entity-header fields.' 
     413    headers.sort() 
     414    cpg.response.headers = [item[1] for item in headers] 
    388415     
    389416    cookie = cpg.response.simpleCookie.output() 

Hosted by WebFaction

Log in as guest/cpguest to create tickets