Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

361
Vistas
No se puede llamar al servicio gRPC desde el cliente Angular

Estoy tratando de llamar a un servicio gRPC desde la aplicación Angular.

Si alojo el servidor localmente y lo llamo desde la aplicación Anuglar, entonces funciona.

 const client = new HelloWorldServiceClient("http://localhost:5001"); const request = new SayHelloMessage(); request.setName("User"); client.sayHelloWorld(request, (err: any, response: any) => { if (err) { console.log(err); this.response = err; return; } this.response = response.getMessage(); });

Sin embargo, cuando intento llamar a un servicio gRPC alojado en un servidor remoto, arroja el error "Respuesta cerrada sin encabezados".

Código cambiado:

 const client = new HelloWorldServiceClient("http://server_name:5001");

Si trato de llamar al mismo servicio alojado en un servidor usando el cliente NodeJS, entonces también funciona.

Código NodeJS:

 var url = "server_name_with_out_http:5001"; // eg server_name:5001 and not http://server_name:5001 const client = new HelloWorldServiceClient( url, grpc.credentials.createInsecure() ); var req = { name: "User" }; client.sayHelloWorld(req, (error, reply) => { if (!error) { console.log(reply.message); } else { console.log(error); } });

¿Cuál podría ser la razón por la que la aplicación Angular no puede llamar al servicio gRPC alojado en el servidor?

Registros de la herramienta de desarrollo de Chrome:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Lo más probable es que esto se deba a las restricciones comunes del navegador CORS , y no exactamente a angular. Esta pregunta contiene una gran orientación sobre CORS.

Llamar a los servicios HTTP desde una aplicación de Node (o desde el cartero) no aplicará CORS, mientras que llamarlo desde un navegador estándar del mercado ciertamente lo haría.

Sé que hay mucho más que mis próximos comentarios simplificados, pero esto debería darle un punto de partida (una inmersión más profunda está en los enlaces que compartí anteriormente)

Para que los navegadores ejecuten XMLHttpRequest de un sitio web a otros dominios (u otros puertos del mismo dominio):

  1. el navegador enviará una solicitud HTTP de OPCIONES antes de cada solicitud real al otro dominio y solo permitirá la solicitud real cuando los encabezados de respuesta de OPCIONES lo autoricen.
  2. el "otro" sitio web debe configurarse para responder a las solicitudes de OPCIONES con encabezados específicos ( Access-Control-Allow-Origin , Access-Control-Request-* ...).

==> Si el otro servidor no responde a las solicitudes de OPCIONES o no proporciona los encabezados apropiados en la respuesta de OPCIONES, puede obtener una variedad de errores diferentes, y "Respuesta cerrada sin encabezados" es uno de ellos.

Creo que su aplicación web gRPC no está configurada con el CORS adecuado para autorizar las comunicaciones desde el sitio web donde está alojando su aplicación angular (incluso si es localhost, aún tendría que configurarlo).

Este artículo tiene una guía práctica sobre cómo configurar CORS en aplicaciones .netcore

y finalmente, este problema/respuestas de github contiene más información sobre un error similar que algunas personas enfrentaron con gRPC, es posible que hayas entrado en el mismo. Si ya ha configurado sus reglas CORS.

over 4 years ago · Santiago Trujillo Denunciar

0

Recomendaría no llamarlo directamente desde el cliente de su navegador (si eso no es lo que quiere, hágamelo saber) y use un proxy inverso en su lugar. Hay muchas herramientas para hacer eso:

  • Traefik
  • grpcwebproxy
  • enviado

De hecho, los ejemplos en el repositorio de Github de gRPC usan envoy ( marque aquí ) y uno de los correos en la lista de correo de grpc-io menciona que no se recomienda contactar directamente su backend con su interfaz web de gRPC.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda