接口404问题解决过程记录


 一、背景

测试人员突然向我反馈,说线上的接口访问不了,返回404了。确认问题确实存在,在查找原因的过程中接口恢复正常。感觉这个问题还是挺有意思,所以记录下来。

 二、404状态码

404 Not Found,一般情况都是指请求服务器上没有的资源

三、解决问题的过程

1.首先想到的是,服务器上的接口文件没了,登进去查看文件是正常的

2.考虑是否是nginx的配置更改导致访问不到,查看了下也是正常

3.接口又恢复正常,考虑是不是公司网络调整导致的,问了问运维网络也没有任何调整

4.查看nginx上面的日志发现确实请求到了服务器上,并且返回了404

查到这里之后就隐约感觉到可能要涨见识了

5.接下来查看了nginx的错误日志(error.log),看到频繁报以下的报错

18522#0: *5382085 recv() failed (104: Connection reset by peer) while reading response header from upstream

6.根据这个报错查找网上资料,说是由于php的运行时间超过php-fpm设置的超时时间(request_terminate_timeout)会提示这个错误

7.将request_terminate_timeout设置值增大,重启php-fpm,验证问题解决

 

四、写文档真有用

1.之前的解决过程就是如第三步所示,但是在记录问题的时候突然思考这种情况不应该报502的错误么......

2.在测试环境进行验证下,写个接口,里面sleep(50),在浏览器中访问下,果然如预期返回了502......

3. ..........

4.继续查找之前的error.log日志,发现还有以下的报错

18523#0: *5381683 open() "/var/www/html/50x.html" failed (2: No such file or directory)

5.看了下nginx.conf,找到以下配置

error_page  500 502 503 504  /var/www/html/50x.html;

6.在测试环境验证了下,出现了预期的404,大功告成。

 


作者:caohaoyu
链接:https://www.jianshu.com/p/069f2c0c3968
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

 

 

使用Postman传入对应的body参数({“id” : “1”}),像该接口发送请求,可以获取到后台数据,但是前段通过ajax发送post请求,传入一样的参数(data: {“id”:“1”}),却报404问题;

原因:
查询问题后,发现后台接口,在接收参数的时候使用了@RequestBody注解;下面是@RequestBody和@RequestParam区别

@RequestBody 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。
(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

@RequestParam可以接受简单类型的属性,也可以接受对象类型。 
实质是将Request.getParameter() 中的Key-Value参数Map利用spring的转化机制ConversionService配置,转化成参数接收对象或字段。

 

解决方案:

方案一:后端修改接收参数的@RequestBody修改为@RequestParam;

方案二:前端在发送ajax请求的时候,讲传入的参数由对象修改为字符串即可;如:
修改前 data:{"id" : "1"} 
修改后----------------> data :JSON.stringify({"id" : "1"})

 

如还有不理解,可百度一下**@RequestBody和@RequestParam区别**
————————————————
版权声明:本文为CSDN博主「whiteGu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whiteGu/article/details/84818472

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM