http2: enable HTTP/2 in wrap configureTransport

The go1.27 wrap implementation of ConfigureTransport is a no-op, and
ConfigureTransports only registers the protocol with net/http; neither
enables HTTP/2 on the transport or initializes TLSClientConfig. The
pre-wrapping transport.go did both.

As a result, callers that enable HTTP/2 on a transport with a custom
TLSClientConfig or dialer (where net/http does not enable HTTP/2
automatically) send requests over HTTP/1 to an HTTP/2 server. Without
"h2" in NextProtos this is a silent downgrade to HTTP/1.1; with it, the
connection negotiates h2 at the TLS layer but is read by the HTTP/1
transport, failing with "net/http: HTTP/1.x transport connection broken:
malformed HTTP response".

This is the client-side counterpart of the server-side fix in CL 782940.
configureTransport now delegates to configureTransports, which ensures a
non-nil TLSClientConfig and enables net/http's native HTTP/2 via
Transport.Protocols.

TestConfigureTransport is gated to the legacy build
(!(go1.27 && !http2legacy)) and does not compile into the wrapper build,
which is why this regressed silently. The new transport_configure_test.go
is untagged and exercises both ConfigureTransport and ConfigureTransports
under the legacy and wrap builds.

Fixes golang/go#79778

Change-Id: Ibc27bced8679fcb3baa7953bad12315da07535fb
Reviewed-on: https://go-review.googlesource.com/c/net/+/785900
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Auto-Submit: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <nsh@golang.org>
2 files changed
tree: a2387d142ec4055cdd7dab6ad31488fb29fca649
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.