表现:
1、前端发起请求 --> node端可以接收 --> 后端无请求日志
2、其中只有获取图形验证码接口表现正常,后端可正常返回值
3、测试环境表现均正常
原因:
前端发起请求 --> nodejs,携带req.headers信息
nodejs发起请求 --> 后端接口,直接将上一步的headers信息带进去了
在线上环境中,访问后端接口时,使用的域名,通过nginx时,获取了headers中的host,
将请求的接口地址指向了host中的地址,但此时host为前端地址,所以一直返回404
图形验证码接口可以访问,原因是,nodejs做转发时,由于图形验证码特殊,需要单独写headers,所以没有使用前端带过来的headers
测试环境可以正常访问,原因是,访问测试环境时,一直使用的IP+端口号,不通过nginx,所以没有使用headers中的host
解决方法:
1、不使用前端带过来的headers,全部自定义headers
2、删除header中的host, const headers = req.headers; delete headers.host;
反思:
1、开发过程中,明确每一环节,每一个参数的作用。通过线上和测试不同表现,应该想到是nginx环节出了问题,搞清楚线上和测试的不同点
2、上线前保证测试环境完全模拟线上环境,包括使用域名以及代理路由等等,防止出现此类线上和测试环境表现不一致问题。