根据注释,问题是您正试图使用gRPC客户机连接到gRPC-Web服务器。gRPC和gRPC-Web是不同的有线协议(创建gRPC-Web是因为web浏览器api不能对实现gRPC的HTTP/2请求提供足够的控制)。这篇博文提供了一个很好的概述。 因为您正在构建一个web-app,所以您需要使用gRPC-Web;如果您还希望使用go客户机连接到服务器,那么首选的选项是使用gRPC(服务器可以同时使用两者)。另一个可行的方法是使用gRPC-Web客户机,但我没有尝试过(这样效率会降低)。 运行gRPC-Web的“官方”方式是通过一个特使插件,但是当您在Go中编写这个插件时,improbable-eng/grpc-web提供了另一个更简单的选项,您已经在使用它了(它们也有一个代理,但是这使得部署更复杂)。 您的服务器需要更改为同时运行gRPC和gRPC-Web。最简单的选择是在不同的端口上运行它们(可以使用mux来检测content-type),但这不是我尝试过的;如果您希望在单个端口上提供html/js和gRPC-Web,那么它确实可以很好地工作。 我运行这两个服务器的方法如下(请将其视为不完整的伪代码,我从一些应用程序中提取了一些位,但没有编译/测试等;当您发现问题时,请随时更新!): grpcServer := grpc.NewServer()greetpb.RegisterGre