code: def read_headers(rfile, hdict=None):
      
      if hdict is None:
          hdict = {}
      
      while True:
          line = rfile.readline()
          if not line:
              # No more data--illegal end of headers
              raise ValueError("Illegal end of headers.")
          
          if line == CRLF:
              # Normal end of headers
              break
          if not line.endswith(CRLF):
              raise ValueError("HTTP requires CRLF terminators")
          
          if line[0] in ' \t':
              # It's a continuation line.
              v = line.strip()
          else:
              try:
                  k, v = line.split(":", 1)
              except ValueError:
                  raise ValueError("Illegal header line.")
              # TODO: what about TE and WWW-Authenticate?
              k = k.strip().title()
              v = v.strip()
              hname = k
          
          if k in comma_separated_headers:
              existing = hdict.get(hname)
              if existing:
                  v = ", ".join((existing, v))
          hdict[hname] = v
      
      return hdict
docs: Read headers from the given stream into the given header dict.
      
      If hdict is None, a new header dict is created. Returns the populated
      header dict.
      
      Headers which are repeated are folded together using a comma if their
      specification so dictates.
      
      This function raises ValueError when the read bytes violate the HTTP spec.
      You should probably return "400 Bad Request" if this happens.