Browser APIs do not give enough control over HTTP/2 framing and trailers, so it needs gRPC-Web and a proxy
gRPC relies on HTTP/2 features such as trailers (headers sent after the body). Browser APIs do not give scripts access to these features. gRPC-Web is a changed version of the protocol that works in browsers. A proxy such as Envoy translates it to native gRPC. The option "browsers cannot send binary request bodies" is wrong, because browsers can send binary bodies.