Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么对入口的HTTP GET请求(GKE)总是返回400(错误请求)错误?_Node.js_Http_Kubernetes_Google Kubernetes Engine_Kubernetes Ingress - Fatal编程技术网

Node.js 为什么对入口的HTTP GET请求(GKE)总是返回400(错误请求)错误?

Node.js 为什么对入口的HTTP GET请求(GKE)总是返回400(错误请求)错误?,node.js,http,kubernetes,google-kubernetes-engine,kubernetes-ingress,Node.js,Http,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,我试图向Kubernetes(GKE)中的应用程序发出GET请求,但总是返回400个错误请求 POST、PUT和DELETE方法工作正常 最奇怪的是,当我直接使用端口转发到pod时,GET请求没有问题 我已尝试尽可能减少应用程序的代码,结果如下所示: const express=require('express')) const app=express() 常数端口=3000 app.use(express.json()) app.use(express.urlencoded({extended

我试图向Kubernetes(GKE)中的应用程序发出GET请求,但总是返回400个错误请求

POST、PUT和DELETE方法工作正常

最奇怪的是,当我直接使用端口转发到pod时,GET请求没有问题

我已尝试尽可能减少应用程序的代码,结果如下所示:

const express=require('express'))
const app=express()
常数端口=3000
app.use(express.json())
app.use(express.urlencoded({extended:true}))
应用程序获取(“/”,(请求,请求)=>{
res.send(请求正文)
})
app.post(“/”,函数(请求,res){
res.send(请求主体);
});
应用程序放置('/',函数(请求,恢复){
res.send(请求主体);
});
应用程序删除(“/”,函数(请求,恢复){
res.send(请求主体);
});
应用程序侦听(端口,()=>{
log(`listing to port${port}`)
})
我认为问题在于我的入口配置,因为使用PortForward,它工作得很好。这是我的入口yaml:

apiVersion:extensions/v1beta1
种类:入口
元数据:
名称:测试入口
规格:
tls:
-主持人:
-我的测试主机
机密名称:tls机密
规则:
-主持人:我的测试主持人
http:
路径:
-路径:/*
后端:
serviceName:我的测试服务
服务端口:3000
最后,这是始终返回400的请求

curl--location--request GET'https://my-test-host/' \
--标题“内容类型:应用程序/json”\
--数据原始'{
“测试”:“123”
}'

同样的请求与其他方法(POST、PUT或DELETE)也能正常工作。请问我做错了什么?

我设法找到了解决问题的办法

问题是,入口不接受主体为的HTTP GET请求,并以错误400响应

最悲哀的是,我在Kubernetes的文档中找不到任何关于这个问题的信息

我在GET请求中搜索了有关发送body的良好实践信息,然后找到以下两个链接:

据我所知,不禁止用身体发送GET,但不建议这样做

因此,为了解决我的问题,我将代码更改为从get请求中的“query”而不是“body”获取参数:

app.get('/',(req,res)=>{
res.send(请求查询)
})
因此,我需要更改GET请求中的发送参数:

curl--location--request GET'https://my-test-host?test=123'
吸取的教训:为了避免问题,永远不要用body接受GET请求

谢谢