node-http-proxy icon indicating copy to clipboard operation
node-http-proxy copied to clipboard

HTTP2 support

Open risacher opened this issue 7 years ago • 9 comments
trafficstars

Now that HTTP2 is in core, it should be supported by node-http-proxy.

My initial efforts to try to make this work result in the following errror:

_http_outgoing.js:490
    throw new TypeError(`Header name must be a valid HTTP Token ["${name}"]`);
    ^

TypeError: Header name must be a valid HTTP Token [":path"]

I think this is because in http-proxy/lib/http-proxy/common.js, setupOutgoing() is basically copying headers from the incoming request to the outgoing request, and HTTP2 headers start with colons, but HTTP1 headers cannot.

risacher avatar Feb 22 '18 22:02 risacher

q.v. https://tools.ietf.org/html/rfc7540#section-8.1.2.3

This has some specific guidance on how to convert HTTP/2 pseudo headers into HTTP/1.1 headers. E.g. "An intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a Host header field if one is not present in a request by copying the value of the ":authority" pseudo-header field."

risacher avatar Feb 23 '18 21:02 risacher

You could check maybe Redbird implementation of it. https://github.com/OptimalBits/redbird

safizn avatar Mar 23 '18 01:03 safizn

Interesting. From what I can tell, Redbird uses the 'spdy' module in place of the https module if HTTP/2 is enabled, and apparently that's sufficient. The relevant code from redbird/proxy.js is this:

if (sslOpts.http2) {
    https = sslOpts.serverModule || require('spdy');
    if(_.isObject(sslOpts.http2)){
      sslOpts.spdy = sslOpts.http2;
    }
  } else {
    https = sslOpts.serverModule || require('https');
  }

risacher avatar Mar 23 '18 17:03 risacher

+1

nadeemkhedr avatar Apr 17 '18 08:04 nadeemkhedr

Nice, I didn't know the spdy module could be used as a drop-in replacement for https, but unfortunately it's no longer being maintained.

skerit avatar Jul 05 '18 13:07 skerit

spdy apparently does not work for node versions above 10.5, so its suitability as a workaround is diminishing.

risacher avatar Dec 10 '18 16:12 risacher

compare to: https://github.com/nxtedition/node-http2-proxy

risacher avatar Feb 04 '19 21:02 risacher

Any updates here ?

ashubham avatar Nov 05 '20 19:11 ashubham

Can it support HTTP/3.0? (I'm not a devil)

zhe-he avatar Dec 18 '23 09:12 zhe-he