code: func initH2CWithPriorKnowledge(w http.ResponseWriter) (net.Conn, error) {
  	hijacker, ok := w.(http.Hijacker)
  	if !ok {
  		return nil, errors.New("hijack not supported")
  	}
  	conn, rw, err := hijacker.Hijack()
  	if err != nil {
  		return nil, fmt.Errorf("hijack failed: %v", err)
  	}
  
  	expectedBody := "SM\r\n\r\n"
  
  	buf := make([]byte, len(expectedBody))
  	n, err := io.ReadFull(rw, buf)
  	if err != nil {
  		return nil, fmt.Errorf("fail to read body: %v", err)
  	}
  
  	if bytes.Equal(buf[0:n], []byte(expectedBody)) {
  		c := &rwConn{
  			Conn:      conn,
  			Reader:    io.MultiReader(bytes.NewBuffer([]byte(http2.ClientPreface)), rw),
  			BufWriter: rw.Writer,
  		}
  		return c, nil
  	}
  
  	conn.Close()
  	if http2VerboseLogs {
  		log.Infof(
  			"Missing the request body portion of the client preface. Wanted: %v Got: %v",
  			[]byte(expectedBody),
  			buf[0:n],
  		)
  	}
  	return nil, errors.New("invalid client preface")
  }
docs: // initH2CWithPriorKnowledge implements creating a h2c connection with prior
  // knowledge (Section 3.4) and creates a net.Conn suitable for http2.ServeConn.
  // All we have to do is look for the client preface that is suppose to be part
  // of the body, and reforward the client preface on the net.Conn this function
  // creates.