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

455
Vistas
¿Por qué esta solicitud HTTP GET a Ingress (GKE) siempre devuelve el error 400 (solicitud incorrecta)?

Estoy intentando realizar una solicitud GET a una aplicación en Kubernetes (GKE), pero siempre devuelve 400 solicitudes incorrectas.

Los métodos POST, PUT y DELETE funcionan perfectamente.

Y lo más extraño es que cuando uso el reenvío de puertos directamente al pod, no tengo problemas con la solicitud GET.

He intentado minimizar el código de mi aplicación tanto como sea posible y se ve así:

 const express = require('express') const app = express() const port = 3000 app.use(express.json()) app.use(express.urlencoded({ extended: true })) app.get('/', (req, res) => { res.send(req.body) }) app.post('/', function(req, res){ res.send(req.body); }); app.put('/', function(req, res){ res.send(req.body); }); app.delete('/', function(req, res){ res.send(req.body); }); app.listen(port, () => { console.log(`Listening to port ${port}`) })

Creo que el problema está en mi configuración de Ingress porque con port-forward funciona bien. Aquí está mi entrada yaml:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress spec: tls: - hosts: - my-test-host secretName: tls-secret rules: - host: my-test-host http: paths: - path: /* backend: serviceName: my-test-service servicePort: 3000

Finalmente, esta es la solicitud que siempre devuelve 400.

 curl --location --request GET 'https://my-test-host/' \ --header 'Content-Type: application/json' \ --data-raw '{ "test": "123" }'

La misma solicitud con otros métodos (POST, PUT o DELETE) funciona bien. Por favor, ¿qué estoy haciendo mal?

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

0

Logré encontrar la solución al problema.

El problema es que Ingress no acepta solicitudes HTTP GET con cuerpo y responde con el error 400.

Lo más triste es que no encontré nada sobre este problema en la documentación de Kubernetes en ninguna parte.

Busqué información de buenas prácticas sobre el envío de cuerpos en solicitudes GET y luego encontré estos dos enlaces:

https://www.rfc-editor.org/rfc/rfc7231#section-4.3.1

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

Según tengo entendido, no está prohibido enviar el GET con el cuerpo, pero no se recomienda.

Entonces, para resolver mi problema, cambié mi código para obtener parámetros de "consulta" en lugar de "cuerpo" en la solicitud GET:

 app.get('/', (req, res) => { res.send(req.query) })

En consecuencia, necesitaba cambiar los parámetros de envío en mi solicitud GET:

 curl --location --request GET 'https://my-test-host?test=123'

Lección aprendida: para evitar problemas, nunca acepte solicitudes GET con cuerpo.

Gracias.

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