Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP2 support #1237

Open
risacher opened this issue Feb 22, 2018 · 9 comments
Open

HTTP2 support #1237

risacher opened this issue Feb 22, 2018 · 9 comments

Comments

@risacher
Copy link

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
Copy link
Author

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."

@safizn
Copy link

safizn commented Mar 23, 2018

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

@risacher
Copy link
Author

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');
  }

@nadeemkhedr
Copy link

+1

@skerit
Copy link

skerit commented Jul 5, 2018

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.

@risacher
Copy link
Author

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

@risacher
Copy link
Author

risacher commented Feb 4, 2019

@ashubham
Copy link
Contributor

ashubham commented Nov 5, 2020

Any updates here ?

@zhe-he
Copy link

zhe-he commented Dec 18, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants