code: def parse(self, charset=None, headers=None):
          
  
          if headers:
              self.headers = headers
          else:
              # Parse headers only from last response
              # There could be multiple responses in `self.head`
              # in case of 301/302 redirect
              # Separate responses
              if self.head:
                  responses = self.head.rsplit(b'\nHTTP/', 1)
                  # Cut off the 'HTTP/*' line from the last response
                  _, response = responses[-1].split(b'\n', 1)
                  response = response.decode('utf-8', 'ignore')
              else:
                  response = u''
              if six.PY2:
                  # email_from_string does not work with unicode input
                  response = response.encode('utf-8')
              self.headers = email.message_from_string(response)
  
          if charset is None:
              if isinstance(self.body, six.text_type):
                  self.charset = 'utf-8'
              else:
                  self.detect_charset()
          else:
              self.charset = charset.lower()
  
          self._unicode_body = None
docs: Parse headers.
  
          This method is called after Grab instance performs network request.