internal/http3: add server support for "Trailer:" magic prefix

Similar to our HTTP/1 and HTTP/2 implementations, allow HTTP/3 server
handler to send trailer headers that have not been declared prior to
writing response body by using the "Trailer:" magic prefix.

To support this, also modify transport to accept all trailers, even
those that have not been declared. This is consistent with the behavior
of our HTTP/1 and HTTP/2 implementations. Note the following,
unfortunately somewhat convoluted, behavior:

1. Transport will never send undeclared trailers.
2. Transport will accept undeclared trailers.
3. Server will never accept undeclared trailers.
4. Server will never send undeclared trailers, unless they use the
   "Trailer:" magic prefix.

For golang/go#70914

Change-Id: Ifa5e026eb6ce68af9a8364845e4f2def6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/785860
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Viacheslav Danilin <viacheslavdanilin@gmail.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <husin@google.com>
4 files changed
tree: ccf6064868537a2a947d523e3c5625d9397a77d6
  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.