记录一次网关方面的问题排查 - Redirect is not allowed for a preflight request

目录

1. 背景

2. 排查问题

1)解决跨域

2)网络问题

3)查看错误

4)抓住关键

3. 解决


1. 背景

我在公司负责的一个系统里面有一个功能是上传文件到腾讯云的OSS桶,对接腾讯云OSS桶的代码在腾讯云的官网有说明,感兴趣可以去搜索看看。重要的是,前几天碰到这样一个问题,有人上报说上传文件时报了跨域

2. 排查问题

1)解决跨域

既然用户说报了跨域,那么首先想到的是去解决跨域,由于这个上传文件,我们是没有通过我们系统的后端的接口去上传的,是直接由前端实例化腾讯云桶,然后调接口由浏览器上传到OSS桶里面。所以我们要想解决跨域,就需要运维的介入,因为这个桶的权限只有运维有,所以第一时间将用户和运维拉了一个群。然后得到运维的回答是这个系统的跨域很早之前就配了的,一直没变过。其实系统刚上线时就配好了的我也知道,只是上线半年多了一直没人报过跨域,今天第一次有人报跨域,想着是不是运维突然改了配置,所以确认一下,那现在得到确认,跨域是配置了的,并且HTTP和HTTPS协议都配置了跨域

2)网络问题

既然配了跨域,并且我和我几个同事都试了我们是可以上传的,所以就怀疑是否为用户网络环境的问题,首先让用户连了公司内网,再上传,无果,同样还是跨域。接着,我给了一张桶里的图片的地址给用户,让他在浏览器打开看是否能打开,这样做的原因是想确认他现在的网络环境是否能访问到腾讯云的桶。然后是能打开的,所以可以确定不是网络环境的问题。

3)查看错误

由于用户也是公司其他中心的研发,所以请用户帮忙看了请求报的具体的错。

有两个错误值得注意:

        1. 上传文件的PUT接口之前发送的预检请求(什么情况会发预检请求可以网上看看)返回了302状态码重定向。

        2. 控制台报错:“Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request” 这下就很明显了,报错预检请求不允许重定向,这又是一个小知识,可以记住,网上搜了搜大部分解决方法就是说让后端配跨域,或者有的是接口有鉴权,然后被鉴权网关返回了重定向去登录的地址。

4)抓住关键

诶,既然被返回了302重定向,肯定是某个用户那边的某个网关或者我们这边的网关拦截了并返回了302,所以又让用户帮忙看了302返回的响应头里的location重定向地址,返回了:“http://ip.ip.ip.ip/disable/disable.html”,其中有个具体的ip地址,不方便写出来,就用ip.ip.ip.ip替代,这里这个ip有点离谱,直接返回了个ip,连个域名都没有的,我都怕是网站被攻击了。后来想了下用户想要请求腾讯云的大概流程。

由于报障这个用户和我不是一个公司,但都属于一个集团下,他的办公地点和我不在一个地方,所以他们公司的网络和我的肯定不是在一个局域网下,然后他的网络访问我们的网站,然后再从我们网站的域名发请求去腾讯云桶,请求肯定会经过他们公司的防火墙或者外网DMZ网关,有没有可能是在这个环节被拦截下来了

然后公司有个网站可以查看ip所对应的组织,去查了查302返回location里的ip,果不其然,是他们公司的网关,那就是被他们公司网关拦截下来了

3. 解决

最后也是抱着试一试的想法,因为之前看他截图发的请求都是http,然后想了想是不是因为他们公司网关把http请求拦了,只能用https,因为https比较安全嘛(诶这就是第一步里我为什么提到HTTP和HTTPS协议都配了跨域的原因,一个callback,哈哈),反正就让他换成https协议了,结果就是可以了,成功上传。

最后让他去问他们的运维或者安全的同事是怎么回事,但是一直还没回复我,就先然后他用着https协议,以后如果有回复我,我再更新原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值