-
Notifications
You must be signed in to change notification settings - Fork 107
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
Intent to support HTTP/2 #200
Comments
We have created an issue in Pivotal Tracker to manage this. Unfortunately, the Pivotal Tracker project is private so you may be unable to view the contents of the story. The labels on this github issue will be updated when the story is started. |
- Basic integration test for HTTP/2 traffic - Still need to backfill unit tests - Running into some difficulties sending HTTP/1.0 requests via http.Client :sweatsmile: [cloudfoundry/routing-release#200] Co-authored-by: Carson Long <lcarson@vmware.com> Co-authored-by: Greg Cobb <gcobb@vmware.com>
- Add integration test. - We were not able to get a router/router test working because making HTTP/2 requests to the test Server resulted in broken pipes. We believe this is due to differences in the test Server setup and the main.go setup used in the integration tests. This will require additional investigation. - Add router/router test to confirm that Gorouter can still server HTTP/1.1 traffic - Update protocol checking middleware to accept HTTP/2 [#177586561] [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com>
- Add integration test. - We were not able to get a router/router test working because making HTTP/2 requests to the test Server resulted in broken pipes. We believe this is due to differences in the test Server setup and the main.go setup used in the integration tests. This will require additional investigation. - Add router/router test to confirm that Gorouter can still server HTTP/1.1 traffic - Update protocol checking middleware to accept HTTP/2 [#177586561] [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com> Co-authored-by: Greg Cobb <gcobb@vmware.com> Co-authored-by: Weyman Fung <weymanf@vmware.com>
- This configuration works for apps that speak h2c, but does not work for HTTP/1.1-only apps [#177586568] [cloudfoundry/routing-release#200] Co-authored-by: Greg Cobb <gcobb@vmware.com>
- Validate that Envoy proxy can handle HTTP/2 requests - Currently does not pass, we believe because test app does not serve HTTP/2 traffic. This reflects an issue with using ALPN: Envoy will negotiate h2 and forward HTTP/2 traffic to an app that might not be able to speak HTTP/2. [#177667830] [cloudfoundry/routing-release#200] Co-authored-by: Greg Cobb <gcobb@vmware.com>
Golang issue for h2c upgrade headers: golang/go#45785 |
- took the blob from the diego release by being in the diego-release directory and running bosh sync-blobs, and copied over the tarball in the blobs folder [#177674381](https://www.pivotaltracker.com/story/show/177674381) [cloudfoundry/routing-release#200](cloudfoundry/routing-release#200) Co-authored-by: Carson Long <lcarson@vmware.com> Co-authored-by: Weyman Fung <weymanf@vmware.com>
|
- The h2c upgrade happens separate from the ALPN negotiation/TLS handshake, so having it be part of TLSNextProto doesn't make sense - Additionally, we need the returned transport to have a method that isn't on the RoundTripper interface, expected to be returned from the ALPN upgrade function - Introduce a new interface, `UpgradableRoundTripper`, and a new map of upgrade functions, `UpgradeNextProto`, to address both of these issues - Collapse `upgradeHttp1Conn` into a boolean argument on `addConnIfNeeded` [cloudfoundry/routing-release#200] Co-authored-by: Carson Long <lcarson@vmware.com>
- http2ClientConn's roundTrip method is responsible for sending a request and receiving the response. In the h2c upgrade case, we already sent the request via HTTP/1, so we only need the logic for recovering the response - This way `cc.roundTrip` and `cc.completeUpgrade` can share the common response-handling logic - Remove the retry logic from CompleteUpgrade (which we copied from RoundTripOpt), since we are not issuing a request (as described above) [cloudfoundry/routing-release#200] Co-authored-by: Greg Cobb <gcobb@vmware.com>
- Move body written state into bodyWriterState struct - Reduce some code duplication between roundTrip and completeUpgrade [cloudfoundry/routing-release#200]
- completeUpgrade and newClientConnWithStream are now private. We may need to make this public again if/when we move the upgrade logic out of the http[2] package [cloudfoundry/routing-release#200]
- Switch `upgradableRoundTripper` and `upgradeNextProto` to be private. We can always change these to be public if/when we move logic into another package. [cloudfoundry/routing-release#200]
- This way we can support adding connections to the pool if the connection is not a TLS connection (for example a h2c connection) - NewClientConn takes a net.Conn anyway, so there is no need to pass down a *tls.Conn if it is just going to be cast down anyway [cloudfoundry/routing-release#200]
Golang issue for h2c client upgrade support: golang/go#46249 |
* `enable_http2`, defaults to false * Set to true to enable communicating with apps via HTTP/2 [#177687027](https://www.pivotaltracker.com/story/show/177687027) [cloudfoundry#200] Co-authored-by: Merric de Launey <mdelauney@vmware.com> Co-authored-by: Carson Long <lcarson@vmware.com>
[cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com>
* `enable_http2`, defaults to false * Set to true to enable communicating with apps via HTTP/2 [cloudfoundry#200] Co-authored-by: Merric de Launey <mdelauney@vmware.com> Co-authored-by: Carson Long <lcarson@vmware.com>
- Add integration test. - We were not able to get a router/router test working because making HTTP/2 requests to the test Server resulted in broken pipes. We believe this is due to differences in the test Server setup and the main.go setup used in the integration tests. This will require additional investigation. - Add router/router test to confirm that Gorouter can still server HTTP/1.1 traffic - Update protocol checking middleware to accept HTTP/2 [#177586561] [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com> Co-authored-by: Greg Cobb <gcobb@vmware.com> Co-authored-by: Weyman Fung <weymanf@vmware.com>
- Add integration test. - We were not able to get a router/router test working because making HTTP/2 requests to the test Server resulted in broken pipes. We believe this is due to differences in the test Server setup and the main.go setup used in the integration tests. This will require additional investigation. - Add router/router test to confirm that Gorouter can still server HTTP/1.1 traffic - Update protocol checking middleware to accept HTTP/2 [#177586561] [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com> Co-authored-by: Greg Cobb <gcobb@vmware.com> Co-authored-by: Weyman Fung <weymanf@vmware.com>
- added enableHTTP2 to config - defaults to false - passes to protocolcheck handler [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com>
* `enable_http2`, defaults to false * Set to true to enable communicating with apps via HTTP/2 [cloudfoundry#200] Co-authored-by: Merric de Launey <mdelauney@vmware.com> Co-authored-by: Carson Long <lcarson@vmware.com>
- added enableHTTP2 to config - defaults to false - passes to protocolcheck handler [cloudfoundry/routing-release#200] Co-authored-by: Weyman Fung <weymanf@vmware.com>
- For route destination endpoints and the manifest schema [cloudfoundry/routing-release#200] Co-authored-by: Greg Cobb <gcobb@pivotal.io> Co-authored-by: Michael Oleske <moleske@pivotal.io>
[cloudfoundry/routing-release#200] Authored-by: Greg Cobb <gcobb@pivotal.io>
[cloudfoundry/routing-release#200] Co-authored-by: Carson Long <lcarson@vmware.com>
* `cf map-route` has a new `--destination-protocol` flag to set a route to use HTTP/2. * New cf CLI v8 command, `cf route`, to view route details and get destination info (specifically, whether a route uses HTTP/2 or not). cloudfoundry/routing-release#200 Co-authored-by: Michael Oleske <moleske@vmware.com>
- When routes are registered and HTTP/2 is disabled, persist the protocol for endpoints as 'http1', even if the message has protocol 'http2'. - It was confusing that the route registry and gorouter logs would show protocol 'http2', even if it would really use HTTP/1.1 when communicating with backends. - Enabling HTTP/2 will require restarting the gorouter, so the route registry will be regenerated with 'http2'. [cloudfoundry/routing-release#217] [cloudfoundry/routing-release#200]
- nginx can not serve both HTTP/1 and HTTP/2 on the same port, if the port does not use TLS. See https://trac.nginx.org/nginx/ticket/816. - Implementation mirrors force_https to make it user-configurable - new staticfile option of `enable_http2` and use of environment variable `ENABLE_HTTP2` to configure nginx - Route HTTP/2 configuration is available via manifest when using cf cli v7 or with the map-route command when using cf cli v8 - since cutlass only supports cf cli v6, testing bypasses cutlass with "cf curl" commands. These can be replaced with proper cf cli commands when upgrading the cf cli version - integration tests only runs on api 2.172.0 or higher [cloudfoundry/routing-release#200] Co-authored-by: Michael Oleske <moleske@vmware.com>
[cloudfoundry/routing-release#200] Authored-by: Greg Cobb <gcobb@pivotal.io>
[cloudfoundry/routing-release#200] Authored-by: Greg Cobb <gcobb@pivotal.io>
- Implementation PR: cloudfoundry/staticfile-buildpack#254 [cloudfoundry/routing-release#200] Authored-by: Greg Cobb <gcobb@pivotal.io>
Related issue: cloudfoundry/routing-release#230 [cloudfoundry/routing-release#200] Authored-by: Greg Cobb <gcobb@pivotal.io>
Hi @Gerg , is there a reason why this is still open? |
Not that I'm aware of. I'll go ahead and close it. |
Continuing the legacy of cloudfoundry/gorouter#276
As a follow up to issue #195, we have generated this proposal to enable http2 in cloud foundry.
We will be using this issue as our central coordination point and linking any associated PRs. Please let us know if you have requests or concerns.
The text was updated successfully, but these errors were encountered: