-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
First of all, thanks for this wonderful library, so far it worked great for our use case.
Problem
I want to create requests using Request struct from this page https://docs.rs/tonic/latest/tonic/struct.Request.html and have easy access to HTTP/2 headers like :scheme, :method, :authority, and so forth.
More specifically
I am currently testing our proxy with the following command:
printf '\x00\x00\x00\x00\x00' | curl -k -o - --data-binary @- --http2-prior-knowledge -iv -H 'Content-Type:application/grpc' -H 'Host: sample.host.net' https://generic-proxy.net/v1.service.Upstream/ReflectHeaders
The curl command gives a nice output on which headers are being sent upstream:
* using HTTP/2
* [HTTP/2] [1] OPENED stream for <SOURCE URL>
* [HTTP/2] [1] [:method: POST]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: sample.host.net]
* [HTTP/2] [1] [:path: /v1.service.Upstream/AddIntegers]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [content-type: application/grpc]
> POST /v1.service.Upstream/ReflectHeaders HTTP/2
> Host: sample.host.net
Same can be done with grpcurl by setting -authority and other headers. By tweaking my curl command to use a custom Host I can see that :authority sent upstream is changing as well, which is what I expect when working with HTTP/2 requests and this is something we are testing for our proxy.
Ask
I would like more clarity on how to set authority headers to enable better configuration over the Request sent to the origin. (1) is it possible today with tonic, because I searched for string authority on all doc pages and only found it inside Uri where authority is just part of a url, not an HTTP/2 pseudoheader :authority, (2) if it's not possible, are there any plans to do so?
Ideal case
Ideally I would like to call .authority() on both the Request/Response and check what was sent over HTTP/2.
Intermediate ask
What is more confusing is that even after setting RUST_LOG to trace and debug and others I can't see ANY output on what authority is being used/sent upstream. And I also can't get tonic_request.metadata().get(":authority") of the constructed request, which is unexpected.