与安卓开发,联调接口时的问题

 nadia     2019-07-09     1559     1   

欢迎来到银盒子的世界~

与安卓的app开发联调的时候,出现的一个莫名其妙的问题,现在记录一下,后期如果解决了,就会来补充这个问题

这次项目用到了网关,用的kong。  其中登陆接口的post请求的接口,安卓的app请求的时候,会报307错误,苹果的app请求的时候,就没有问题,包括自己几个测试接口的小工具,也没有问题。

排查的时候,发现是自己的nginx,把http请求转https的时候,用的307转换的。

把307换成301的时候,网关监听到https的请求,转发到我这里,所有的post请求就都变成了get请求,rewrite也会把get变成post

把nginx上的监听http的关掉,只监听https的,又发现,网关只能转发到我的http,需要我自己手动在nginx里把http转成https才行

问题陷入了怪圈,网关只能转发到我的http,可是我用nginx做http转https的时候,用301和rewrite会导致网关的post请求变成get请求,用307会导致安卓的请求直接报错307  

(要是后边解决了这个问题,我就回来更新)

先记录一下排除流程。

前端通过打印接口的响应头,说返回的数据已经不是json的了,我这边就去自己打印一下接口的响应头。部署到服务器上,用的uwsgi,它的日志也不打印响应头和响应参数,百度了一下,也没有结果。那就只能从程序里入手。项目用的flask框架,百度了flask怎么打印响应头,如下:

from flask import jsonify
resp = jsonify({'error':False})
resp.headers['Content-Type'] = 'application/json'
print(resp.headers)

第三行我是强制设置了一下响应头(因为前端说响应的头部,已经不是json了)。然后前端请求,发现经过网关的post请求都没有到我这一层。不使用网关代理,直接请求服务器的接口,发现打印出来的请求头对着呢,确实是json。然后忽然反应过来,经过网关,再经过nginx,前端的请求就停留在这一层了,返回的307是nginx的307,就那种307页面,所以,前端打印响应头,才是307(就是打印出来的是nginx的307,类似于nginx的hello,nginx!的页面)。

然后前端定位问题,应该是它程序代码里使用的框架,对这种响应的规范很严格,307的不让过。

(目前到这里,后边接着更新)


解决了,只在在阿里云上把80端口监听停掉了,这样网关就只能进443  然后就好了

文章评论

  •   nadia
    发布于 2019-07-09 14:54:11 回复
  • 后边怎么处理的?

发表评论