proxy-wasm-rust-sdk icon indicating copy to clipboard operation
proxy-wasm-rust-sdk copied to clipboard

setting :authority in initial_metadata creates two :authority values

Open collinlee opened this issue 2 years ago • 3 comments

When I attempt to set the initial_metadata value as a vector in dispatch_grpc_call like so


dispatch_grpc_call(
                    "upstream-cluster",
                    "test.Service",
                    "testMethod",
                    vec![
                        (":scheme", "https".as_bytes()),
                        (":authority", "foo.aws.foobar.cl".as_bytes())
                    ],
                    Some(request.write_to_bytes().unwrap().as_slice()),
                    Duration::from_secs(2),
)

I see in the Envoy logs that the headers sent are

':authority', 'upstream-cluster,foo.aws.foobar.cl'

Is there a way that :authority can only be set to foo.aws.foobar.cl?

collinlee avatar Jun 08 '23 23:06 collinlee

gRPC's initial metadata is supplemental metadata that's encoded as HTTP headers, but those shouldn't be used as HTTP headers, and you cannot use it to override HTTP headers.

Having said that, it looks that Envoy implementation has a bug that allows setting two :authority values, which it concatenates.

Could you open issue there? Thanks! cc @mpwarres

PiotrSikora avatar Jun 08 '23 23:06 PiotrSikora

Also, answering your original question, I think you should be able to configure :authority in upstream-cluster's configuration in Envoy using the Endpoint's hostname field.

PiotrSikora avatar Jun 09 '23 00:06 PiotrSikora

I've tried to see if in the cluster definition under load_assignment setting hostname in endpoint as you mentioned, but it doesn't seem to use that value in the authority header

          load_assignment:
            cluster_name: upstream-cluster
            endpoints:
              - lb_endpoints:
                  - endpoint:
                      hostname: foo.aws.foobar.cl
                      address:
                        socket_address:
                          address: foo.aws.foobar.cl
                          port_value: 80

collinlee avatar Jun 13 '23 22:06 collinlee