code: func (h *RequestHeader) SetCanonical(key, value []byte) {
  	h.parseRawHeaders()
  	switch string(key) {
  	case "Host":
  		h.SetHostBytes(value)
  	case "Content-Type":
  		h.SetContentTypeBytes(value)
  	case "User-Agent":
  		h.SetUserAgentBytes(value)
  	case "Cookie":
  		h.collectCookies()
  		h.cookies = parseRequestCookies(h.cookies, value)
  	case "Content-Length":
  		if contentLength, err := parseContentLength(value); err == nil {
  			h.contentLength = contentLength
  			h.contentLengthBytes = append(h.contentLengthBytes[:0], value...)
  		}
  	case "Connection":
  		if bytes.Equal(strClose, value) {
  			h.SetConnectionClose()
  		} else {
  			h.ResetConnectionClose()
  			h.h = setArgBytes(h.h, key, value, argsHasValue)
  		}
  	case "Transfer-Encoding":
  		// Transfer-Encoding is managed automatically.
  	default:
  		h.h = setArgBytes(h.h, key, value, argsHasValue)
  	}
  }
docs: // SetCanonical sets the given 'key: value' header assuming that
  // key is in canonical form.