post请求302以及post请求变更为get请求的问题排查小记

一、背景:测试环境,和第三方对接,之前接口访问一直正常,有一天对方反馈,测试环境所有接口请求返回状态为 302。

对方请求 (具体数据忽略)

curl -X POST -H 'Content-Type:application/json' --data '{ "version": "1.0",.......}' 'http://xx.com/xx/xx'

二、验证过程:

在公司内网:

1、同样以以上方式,基于对方请求的某一个接口和参数进行接口调用,发现我们自己内部调用正常。

2、用postman 测试也是正常

改用外网:

1、用命令的形式执行,问题复现,出现302

2、用postman 或者网页版在线http请求的方式进行post调用,接口能通,但是内部错误是Request method 'GET' not supported,明显是把post请求,莫名的转为了get请求。

初步结论:

1、接口服务没问题,肯定是某些运维环境的变动引起的

2、内网访问正常,外网就不正常,应该和域名路由转发规则有关

三、排查过程:

1、猜想是否有外网白名单限制?

细想,302 表示已经访问通了,只是未重定向到最终的资源目标,事实测试环境公司未对外网ip 做白名单限制

2、猜想运维环境或者测试环境有特别的配置变动

运维同事和测试负责人皆说环境未变动 (头大)

3、公司的域名转发配置的问题?

查阅了相关nginx的资料,发现nginx 的不当配置是可能会引起重定向找不到最新的资源,以及post 请求转为get请求的,资料如下

https://www.cnblogs.com/xxoome/p/8950650.html
https://www.cnblogs.com/ybyqjzl/articles/10352571.html

再次询问运维的同事和测试组的负责人,会不会是不是nginx配置的问题,依然说自己的配置没变动,并且说,测试环境不是通过nginx 做域名转发的,说是容器服务,让追问下其他技术部门容器服务的负责人,看看

4、容器部门负责人说,现在外网统一使用https ,修改为https 服务即可

修改https 访问,问题解决

5、自问: k8s 容器服务到底怎么处理的

本质上应该和nginx 性质一样,为了一探究竟,简单查询了相关资料,略有了解,k8s 可以配置禁止http 强制转https 服务,以及k8s 域名配置及转发规则的配置,附上查阅的资料:

k8s容器服务:如何不让ingress重定向HTTP请求

https://developer.aliyun.com/ask/15659?spm=a2c6h.13159741

TKE容器服务​创建ingress

https://cloud.tencent.com/developer/article/1354241

6、内网访问和外网访问接口,是怎么控制域名转发规则的,为什么内网访问http、https就正常,外网就需要https

首先肯定也是通过域名转发规则走的

四、总结

其实整个过程,还是发现一些问题的,外网的黑白名单限制未处理,部门协作分工问题(测试环境的工作,运维基本不管,容器服务的工作,测试和运维也不了解,导致走了很多弯路),当然自身对公司部门分工及k8s 容器的知识也还是欠缺了解。

你可能感兴趣的:(K8s容器化,post,get)