hi, I meet the same issue. I dont know whether you has resloved the issue if you resloved this,can you give some tips? 在2016年4月15日星期五 UTC+8 02:30:48<Li Su> 写道:
> Hi~ I try to implement a h2 tunnel, but meet some problem.. > > base on http://httpwg.org/specs/rfc7540.html#CONNECT and > https://github.com/golang/go/issues/13717 > > ..maybe we should do something like this? (without something like hijack > in h2) > > handler := func(rw http.ResponseWriter, req *http.Request) { > if req.Method == "CONNECT" { > // 1. receive CONNECT request.. > fmt.Println("Handle https") > > // 2. establishes a TCP connection to the server identified in the > :authority > remoteConn, err := net.Dial("tcp", req.Host) > if err != nil { > panic(err) > } > > // 3. sends a HEADERS frame containing a 2xx series status code to > the client, as defined in [RFC7231], Section 4.3.6 > rw.WriteHeader(http.StatusOK) > > // 4. transmitted DATA between client and TCP server > go Pipe(&clientConn{Reader: req.Body, Writer: rw}, remoteConn) > } else { > fmt.Println("Handle as http") > //... > } > } > > but, when I try proxy my Chrome to this code using h2...it doesn't work > > in chrome://net-internals see some log like this.. > > t= 27 [st= 0] +HTTP2_SESSION [dt=42430] > --> host = "www.sulicc.com:443" > --> proxy = "DIRECT" > t= 27 [st= 0] HTTP2_SESSION_INITIALIZED > --> protocol = "h2" > --> source_dependency = 546424 (SOCKET) > t= 27 [st= 0] HTTP2_SESSION_SEND_SETTINGS > --> settings = ["[id:3 flags:0 value:1000]","[id:4 > flags:0 value:6291456]"] > t= 27 [st= 0] HTTP2_STREAM_UPDATE_RECV_WINDOW > --> delta = 15663105 > --> window_size = 15728640 > t= 27 [st= 0] HTTP2_SESSION_SENT_WINDOW_UPDATE_FRAME > --> delta = 15663105 > --> stream_id = 0 > t= 27 [st= 0] HTTP2_SESSION_SEND_HEADERS > --> fin = false > --> :method: CONNECT > :authority: imququ.com:443 > user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X > 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 > Safari/537.36 > --> priority = 4 > --> stream_id = 1 > --> unidirectional = false > t= 27 [st= 0] HTTP2_SESSION_RECV_SETTINGS > --> clear_persisted = false > --> host = "www.sulicc.com:443" > t= 27 [st= 0] HTTP2_SESSION_RECV_SETTING > --> flags = 0 > --> id = 5 > --> value = 1048576 > t= 27 [st= 0] HTTP2_SESSION_RECV_SETTING > --> flags = 0 > --> id = 3 > --> value = 250 > t= 27 [st= 0] HTTP2_SESSION_RECV_SETTING > --> flags = 0 > --> id = 6 > --> value = 1048896 > t= 1056 [st= 1029] HTTP2_SESSION_RECV_HEADERS > --> fin = true > --> :status: 200 > content-type: text/plain; charset=utf-8 > content-length: 0 > date: Thu, 14 Apr 2016 17:34:28 GMT > --> stream_id = 1 > t= 1056 [st= 1029] HTTP2_SESSION_RECV_DATA > --> fin = true > --> size = 0 > --> stream_id = 1 > t= 1056 [st= 1029] HTTP2_SESSION_RST_STREAM > --> description = "" > --> status = 5 > --> stream_id = 1 > t= 1056 [st= 1029] HTTP2_STREAM_ERROR > --> description = "SPDY stream closed with status: 5" > --> status = -337 > --> stream_id = 1 > > After CONNECT, it receive HEADERS > > t= 1056 [st= 1029] HTTP2_SESSION_RECV_HEADERS > --> fin = true > --> :status: 200 > content-type: text/plain; charset=utf-8 > content-length: 0 > date: Thu, 14 Apr 2016 17:34:28 GMT > --> stream_id = 1 > > then HTTP2_SESSION_RECV_DATA...and browser doesn't send data any more.... > > In http://httpwg.org/specs/rfc7231.html#CONNECT, it said > > A server MUST NOT send any Transfer-Encoding or Content-Length header > fields in a 2xx (Successful) response to CONNECT. A client MUST ignore any > Content-Length or Transfer-Encoding header fields received in a successful > response to CONNECT. > > but rw.WriteHeader(http.StatusOK) still write a header content-length: 0... > maybe it's a question? > > without hijack, how can we write only httpcode and without header... just > "HTTP/1.0 > 200 Connection established\r\n\r\n" in http/2 and let browser send data? > > > thank you~ > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4e06fb10-9dcb-4d9c-b420-2d0ffc6ab7ean%40googlegroups.com.