title: React-native + gRPC-web error: Http response at 400 or 500 level
body: <p>I was trying to add gRPC to a react-native project. I use envoy which is listening on port 8080 to proxy requests to the node server running on port 4000. However, I get this error message “Http response at 400 or 500 level”. I use the same envoy.yaml config for another React project and it works perfectly. What’s wrong with my configuration here? Can anyone help plz?</p>
  <p>envoy.yaml</p>
  <pre><code>static_resources:
    listeners:
      - name: listener_0
        address:
          socket_address: { address: 0.0.0.0, port_value: 8080 }
        filter_chains:
          - filters:
              - name: envoy.filters.network.http_connection_manager
                typed_config:
                  '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                  codec_type: auto
                  stat_prefix: ingress_http
                  route_config:
                    name: local_route
                    virtual_hosts:
                      - name: local_service
                        domains: ['*']
                        routes:
                          - match: { prefix: '/' }
                            route:
                              cluster: piement_service
                              timeout: 0s
                              max_stream_duration:
                                grpc_timeout_header_max: 0s
                        cors:
                          allow_origin_string_match:
                            - prefix: '*'
                          allow_methods: GET, PUT, DELETE, POST, OPTIONS
                          allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
                          max_age: '1728000'
                          expose_headers: custom-header-1,grpc-status,grpc-message
                  http_filters:
                    - name: envoy.filters.http.grpc_web
                      typed_config:
                        '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb
                    - name: envoy.filters.http.cors
                      typed_config:
                        '@type': type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
                    - name: envoy.filters.http.router
                      typed_config:
                        '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
    clusters:
      - name: piement_service
        connect_timeout: 0.25s
        type: logical_dns
        http2_protocol_options: {}
        lb_policy: round_robin
        load_assignment:
          cluster_name: piement_service
          endpoints:
            - lb_endpoints:
                - endpoint:
                    address:
                      socket_address:
                        address: 0.0.0.0
                        port_value: 4000
  </code></pre>
  <p>server.js</p>
  <pre><code>const path = require(&quot;path&quot;);
  require(&quot;dotenv&quot;).config({
    path: path.resolve(__dirname, &quot;.env&quot;),
  });
  const express = require(&quot;express&quot;);
  const app = express();
  const port = 4000;
  
  const { signIn, signUp, forgetPassword } = require(&quot;./controller/authHandler&quot;);
  
  const grpc = require(&quot;grpc&quot;);
  const protoLoader = require(&quot;@grpc/proto-loader&quot;);
  
  app.use(express.static(&quot;public&quot;));
  app.use(express.json());
  
  const AUTH_PROTO_PATH = __dirname + &quot;/proto/auth.proto&quot;;
  
  const SERVER_URI = &quot;0.0.0.0:8080&quot;;
  
  const packageDefinition = protoLoader.loadSync(AUTH_PROTO_PATH);
  const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
  
  const server = new grpc.Server();
  
  server.addService(protoDescriptor.AuthService.service, {
    signIn,
    signUp,
    forgetPassword,
  });
  
  server.bind(SERVER_URI, grpc.ServerCredentials.createInsecure());
  console.log(server);
  server.start();
  
  app.listen(port, () =&gt; console.log(`Node server listening on port ${port}!`));
  </code></pre>