Ana içeriğe geç

Yaygın Hatalar

Bu sayfa, connect-go ile çalışırken yaygın hataların nasıl düzeltileceğini açıklar. Mümkün olduğunca, Connect çalışma zamanı bu sorunları tanır ve hata mesajında bu sayfaya bir bağlantı içerir.

Client eksik WithGRPC

Eğer bir Connect istemcisi kullanarak bir grpc-go sunucusunu arar ancak WithGRPC seçeneğini unutursanız, aşağıdaki gibi uzun bir hata mesajı göreceksiniz:

unavailable: possible missing connect.WithGRPC() client option when talking to gRPC server, see https://connectrpc.com/docs/go/common-errors: Post "http://0.0.0.0:3000/buf.ping.v1alpha1.PingService/Ping": http2: Transport: cannot retry err [stream error: stream ID 3; PROTOCOL_ERROR; received from peer] after Request.Body was written; define Request.GetBody to avoid this error — Connect Documentation

Bu hatayı, istemcinizi oluştururken WithGRPC istemci seçeneğini kullanarak düzeltebilirsiniz.

client := greetv1connect.NewGreetServiceClient(
http.DefaultClient, // ancak aşağıda da h2c'ye ihtiyacınız olabilir
"https://api.acme.com",
connect.WithGRPC(),
)

Client eksik h2c yapılandırması

Eğer TLS desteklemeyen bir grpc-go sunucusunu aramak için bir Connect istemcisi kullanıyorsanız, muhtemelen bu hatayı göreceksiniz:

unavailable: possible h2c configuration issue when talking to gRPC server, see https://connectrpc.com/docs/go/common-errors: Post "http://0.0.0.0:3000/buf.ping.v1alpha1.PingService/Ping": net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00" — Connect Documentation

Bazı durumlarda, bunun yerine daha genel bir hata göreceksiniz:

unavailable: possible h2c configuration issue when talking to gRPC server, see https://connectrpc.com/docs/go/common-errors: Post "http://0.0.0.0:3000/buf.ping.v1alpha1.PingService/Ping": write tcp 127.0.0.1:64657->127.0.0.1:3000: write: broken pipe — Connect Documentation

Her iki durumda da, sunucunun istemcilerin TLS olmadan HTTP/2 kullanmasını bekleyip beklemediğini kontrol edin. Eğer öyleyse, HTTP istemcinizin h2c'yi etkinleştirdiğinden emin olun:

client := greetv1connect.NewGreetServiceClient(
&http.Client{
Transport: &http2.Transport{
AllowHTTP: true,
DialTLS: func(network, addr string, _ *tls.Config) (net.Conn, error) {
// Eğer bu istemciyi h2c trafiği dışındaki trafiği de kullanıyorsanız,
// ağ TCP değilse veya addr bir izin listesinde değilse
// tls.Dial'e devretmek isteyebilirsiniz.
return net.Dial(network, addr)
},
},
},
"http://api.acme.com",
connect.WithGRPC(),
)