.NET 6 gRPC服务非TLS调用问题:能否实现无TLS访问?
可以实现无TLS调用gRPC端点
你遇到的Received RST_STREAM with code 2 triggered by internal client error: Protocol error错误,本质是客户端(Postman)默认用HTTP/1.1调用了依赖HTTP/2的gRPC服务,协议不匹配导致的。只要完成服务端和客户端的对应配置,就能正常无TLS调用gRPC接口。
服务端配置(.NET 6)
需要确保Kestrel明确允许非TLS端口使用HTTP/2协议,在Program.cs中添加以下配置:
var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听非TLS端口并启用HTTP/2 builder.WebHost.ConfigureKestrel(options => { options.ListenLocalhost(51653, listenOptions => { listenOptions.Protocols = HttpProtocols.Http2; }); }); // 添加gRPC服务 builder.Services.AddGrpc(); var app = builder.Build(); // 映射gRPC端点 app.MapGrpcService<YourGrpcService>(); app.Run();
如果你的服务需要同时支持HTTP/1.1(比如用于REST接口)和HTTP/2(gRPC),可以把HttpProtocols.Http2改成HttpProtocols.Http1AndHttp2,gRPC请求会自动适配HTTP/2。
Postman客户端配置
Postman默认对http://开头的请求使用HTTP/1.1,需要手动切换到HTTP/2:
- 打开gRPC请求页面,输入服务器地址:
http://localhost:51653 - 点击页面底部的Advanced展开高级选项
- 在HTTP Version下拉菜单中选择HTTP/2
- 重新发送请求即可正常响应
内容的提问来源于stack exchange,提问作者Andrea Maestroni
相关产品推荐
相关产品推荐

