記錄一次前端調用後端接口返回404的經歷

問題描述

接口是新開發的,並無上線,因此我在測試環境中帶上了後端項目的分支
在測試環境調用後端接口時卻發現404報錯,如圖: 前端

思考過程

  • 首先第一反應是url寫錯了,好比單詞寫錯,多了"/"等,可是從新去接口文檔中複製發現並無錯。
  • 接着我懷疑是沒有後端接口資源,我直接把接口在瀏覽器中打開,發現GET請求是可用的。並且通過詢問,該接口已經通過了ios和安卓的驗證是可行的。我本身用postman請求了一下發現確實能夠通 (沒填參數,可是是有後端資源的)。

  • 而後我懷疑瀏覽器裏的POST被代理到別的的環境中去了,關Charles關switchyOmega,檢查我負責的項目中有沒有被中間件代理,然鵝並無。這就有意思了,我頓時以爲我可能會從這個問題裏學到東西。
  • 仔細看404的返回值是這樣的:

openresty是一個基於Nginx 與Lua 的高性能Web 平臺,也就是說這個404是Nginx返回的,因而讓後端同窗查了一下Nginx日誌,比較了一下正常的post接口請求和這個有什麼區別。結果發現並無什麼不同。通過後端同窗的更進一步探索,發現請求是由兩層Nginx代理的,最後竟然會把請求的origin從測試域名修改爲線上域名???也就是前端本身調本域名的接口竟然跨域了,直接被Nginx攔下來,且沒有跨域報錯信息。get請求沒有origin,因此正常,post帶了origin因此纔出錯了。其餘正常的接口是由於後端作了針對性配置,這個新接口沒配,果斷讓後端去改。這種歷史遺留下來的坑真的是防不勝防……

結論

404不必定是純前端問題,當前端無出錯可能時,把目光放到前端之外的範疇,可能會有新答案。ios

相關文章
相關標籤/搜索