接口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