报错如下:
1 4xx BadRequesterror reading server preface: http2: frame too large
其中4xx为客户端报错中的一个具体数字。比如: 404/415,仅以报错举例,且出现报错码不固定。
但是error msg的核心内容不变: frame too large...
这个是因为客户端在没有 TLS 加密的情况下发送 HTTP/2 帧,服务器端在 HTTP 1.1 中以未加密的 HTTP 正文发回错误消息。
grpc是以http2.0进行交互,而客户端如果由于某些原因,将http转为2.0以下的标准,则会出发这个报错。
以golang的grpc举例规避:
proxyCA := "/var/tmp/fullchain.pem" // CA cert that signed the proxy f, err := os.ReadFile(proxyCA) p := x509.NewCertPool() p.AppendCertsFromPEM(f) tlsConfig := &tls.Config{ RootCAs: p, } conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)))
特别需要指出:
在postman加成的情况下,会自动集成证书,帮助完成校验,才能正常交互(具体需要抓包自证,不过不携带证书,必然访问失败,所以也可暂时反推这个结果。)
标签:HTTP,grpc,frame,large,报错,too From: https://www.cnblogs.com/supermarx/p/17765368.html