Changeset 957
- Timestamp:
- 02/07/06 01:45:39
- Files:
-
- trunk/cherrypy/_cphttptools.py (modified) (2 diffs)
- trunk/cherrypy/lib/httptools.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/_cphttptools.py
r942 r957 304 304 raise cherrypy.NotFound(objectpath) 305 305 306 general_header_fields = ["Cache-Control", "Connection", "Date", "Pragma",307 "Trailer", "Transfer-Encoding", "Upgrade", "Via",308 "Warning"]309 response_header_fields = ["Accept-Ranges", "Age", "ETag", "Location",310 "Proxy-Authenticate", "Retry-After", "Server",311 "Vary", "WWW-Authenticate"]312 entity_header_fields = ["Allow", "Content-Encoding", "Content-Language",313 "Content-Length", "Content-Location", "Content-MD5",314 "Content-Range", "Content-Type", "Expires",315 "Last-Modified"]316 317 _header_order_map = {}318 for _ in general_header_fields:319 _header_order_map[_] = 0320 for _ in response_header_fields:321 _header_order_map[_] = 1322 for _ in entity_header_fields:323 _header_order_map[_] = 2324 325 306 326 307 class Body(object): … … 416 397 self.headers['Content-Length'] = len(content) 417 398 418 # Headers 419 header_list = [] 420 for key, valueList in self.headers.iteritems(): 421 order = _header_order_map.get(key, 3) 422 if not isinstance(valueList, list): 423 valueList = [valueList] 424 for value in valueList: 425 header_list.append((order, (key, str(value)))) 426 # RFC 2616: '... it is "good practice" to send general-header 427 # fields first, followed by request-header or response-header 428 # fields, and ending with the entity-header fields.' 429 header_list.sort() 430 self.header_list = [item[1] for item in header_list] 399 # Transform our header dict into a sorted list of tuples. 400 self.header_list = self.headers.sorted_list() 431 401 432 402 cookie = self.simple_cookie.output() 433 403 if cookie: 434 lines = cookie.split("\n") 435 for line in lines: 404 for line in cookie.split("\n"): 436 405 name, value = line.split(": ", 1) 437 406 self.header_list.append((name, value)) trunk/cherrypy/lib/httptools.py
r945 r957 423 423 return [] 424 424 return header_elements(key, h) 425 426 general_fields = ["Cache-Control", "Connection", "Date", "Pragma", 427 "Trailer", "Transfer-Encoding", "Upgrade", "Via", 428 "Warning"] 429 response_fields = ["Accept-Ranges", "Age", "ETag", "Location", 430 "Proxy-Authenticate", "Retry-After", "Server", 431 "Vary", "WWW-Authenticate"] 432 entity_fields = ["Allow", "Content-Encoding", "Content-Language", 433 "Content-Length", "Content-Location", "Content-MD5", 434 "Content-Range", "Content-Type", "Expires", 435 "Last-Modified"] 436 437 order_map = {} 438 for _ in general_fields: 439 order_map[_] = 0 440 for _ in response_fields: 441 order_map[_] = 1 442 for _ in entity_fields: 443 order_map[_] = 2 444 445 def sorted_list(self): 446 """Transform self into a sorted list of (name, value) tuples. 447 448 From http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 449 '... it is "good practice" to send general-header fields first, 450 followed by request-header or response-header fields, and ending 451 with the entity-header fields.' 452 """ 453 454 header_list = [] 455 for key, valueList in self.iteritems(): 456 order = self.order_map.get(key, 3) 457 if not isinstance(valueList, list): 458 valueList = [valueList] 459 for value in valueList: 460 header_list.append((order, (key, str(value)))) 461 header_list.sort() 462 return [item[1] for item in header_list] 425 463 426 464 … … 482 520 ## raise StopIteration() 483 521 return data 522

