首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置grpc-web调用的标头

设置grpc-web调用的标头
EN

Stack Overflow用户
提问于 2021-06-24 20:10:28
回答 1查看 269关注 0票数 0

我目前正面临着grpc-web和负载均衡器的问题。尝试从网关API调用grpc the服务时,会导致以下错误:

代码语言:javascript
复制
Status(StatusCode="Unknown", Detail="Bad gRPC response. HTTP status code: 411")

似乎需要以下两个标头之一: content-length或Transfer-Encoding。

我有一个在我的客户端设置元数据的方法。

代码语言:javascript
复制
private async Task<Metadata> SetMetadata()
    {
        //More stuff here
        
        headers.Add("Transfer-Encoding", "chunked");

        return headers;
    }

下面是我创建客户端的方式:

代码语言:javascript
复制
private async Task<Services.Protobuf.ServiceClient> CreateClient()
    {

        var httpMessageHandler = new HttpClientHandler();

        _grpcChannel ??= GrpcChannel.ForAddress(
            await _serviceAddressProvider.GetServiceAddress<ServiceClient>() ??
            throw new InvalidOperationException(),
            new GrpcChannelOptions()
            {
                HttpHandler = new GrpcWebHandler(httpMessageHandler)
            });
        return new(_grpcChannel);
    }

下面是我如何使用这两个

代码语言:javascript
复制
 var serviceClient = await CreateClient();
 var request = new Request
 {
     //Request stuff
 };
 var getListReply = await serviceClient.GetListReplyAsync(request, await SetMetadata());

现在。问题是我既不能设置Transfer-Encoding也不能设置Content-Lenght标头。它们只是在某个地方被剥离了。如果fiddler正在运行,它们就会被添加(我假设是由fiddler添加的),并且请求实际上是有效的。但是如果fiddler没有运行,报头就不在那里,我就会得到上面的错误。(老实说,我不明白小提琴手的部分,我只是报告我所看到的)。

有人知道为什么会发生这种情况吗?是否有可能添加我试图使用grpc-web添加的标头?

EN

回答 1

Stack Overflow用户

发布于 2021-08-21 19:36:11

我对grpc-web了解不多,但是grpc-gateway在将HTTP请求转发到grpc服务器时,如果它们没有grpcmetadata前缀,就会剥离HTTP头

你可以看看这个问题的帖子https://github.com/grpc-ecosystem/grpc-gateway/issues/1244

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68115522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档