記錄前端排查net::err_empty_response的過程
問題描述:
項目框架:vue+elementui
部署環境:k8s nginx
項目部署到測試環境,登錄到首頁,或者刷新首頁(刷新6、7次必現)會偶現如下幾個錯誤,但是生產環境和本地沒有問題,且https訪問沒問題,但是http訪問會有問題。出現問題之后會導致頁面空白。
Err_empty_response、ERR_CONTENT_LENGTH_MISMATCH、ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

排查過程:
一、排除登陸驗證跳轉引起的問題
根據錯誤信息(Err_empty_reponse ERR_CONTENT_LENGTH_MISMATCH)百度得到的結論都是請求還未返回就被中斷了,或者是請求還未被完全接收(可能只接收的一半)請求就被中斷了,考慮到請求被中斷,第一想到的是,因為這個項目是單點登陸,所以在刷新頁面的時候,會去判斷是否已登陸,刷新的時候store的isLogin的狀態會丟失,所以會去請求是否登陸,瀏覽器的url會跳轉,驗證完成之后會在跳轉到當前頁面,想著是否跳轉引起的js還未加載完成就刷新的頁面,所以就去把跳轉的代碼注釋了,寫死登陸信息,在測試環境驗證還是有問題,就排除了這個問題。
二、排除包太大引起的
因為我這邊出現的一直是打包后的app.js報錯,所以想著是否是因為打包的js文件過大引起的,所以就更改的vue.config.js文件,分包讓js變小一點,但是部署后測試依然發現還是有這個問題

三、排除http訪問時但是轉發了https的請求
因為https并沒有問題,百度有說代碼里面有https的請求,說在http中訪問了https的請求導致的,把代碼中的https的請求全部換成http,部署測試依然不行
四、排除nginx的緩存大小和緩存臨時目錄沒有權限
根據net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)這個錯誤提示,百度搜索說是nginx的緩存太小或者是nginx的臨時目錄過大或沒有權限寫入緩存文件,但是我調整(改緩存大小,給權限、禁用緩存)之后,在部署依然還是有這個問題,同時測試了關閉proxy緩存依然有問題
參考:http://www.rzrgm.cn/youcong/p/13828579.html



五、排除nginx配置問題
考慮到相同的部署環境,其他的項目都可以,為什么就這個項目不行,想著會不會配置不一樣導致,所以去比對了其他的項目和本項目nginx和k8s的配置,把不同的地方都改成了一樣,部署之后測試發現依然不行。
六、注釋首頁的請求(已經差不多快要定位到問題了)
測試發現這個項目的首頁刷新要發送37個請求,而其他的項目只有20多個,想著是不是因為請求太多了造成的,是不是服務做了限流?于是就把這個頁面的所有初始化要請求的api全部注釋了(只是為了減少請求數量,初始化時會調用好幾個接口初始化數據),再部署測試發現竟然可以了(純屬瞎貓碰上死耗子),然后再一點點的打開api請求,驗證問題,發現這個頁面的查詢api(created鉤子函數中調用查詢接口)只要調用了項目就有問題,想著這個api是再created生命周期函數中,想著是不是太早了,改到mounted之后依然不可以,想著可能是和這個查詢方法有關系,就一點點的注釋代碼驗證確實具體是哪行代碼引起,發現就是調用這個api有問題。
七、排除重復刷新引起問題
上面發現mounted調用這個接口有問題,就想打印日志看一下,有沒有錯誤信息,后來發現這個mounted頁面竟然調用了兩遍,就想著會不會和這個有關系,然后調整了代碼,mounted只調用一遍(初始化有些參數變更會自動刷新頁面導致兩次調用),測試發現依然不可以。
八、postman驗證api
想著是不是就是api本身有問題(因為api有時候是可以調通的,所以之前沒有想過是api的問題),單獨把這個api拿出來放到postman驗證,發現缺有問題,概率性的掉不通,但大部分情況可以通,并且其他的api并沒有這個問題,所以想著應該不是api的問題,會不會是這個api請求不通的時候,是因為請求根本沒有到達nginx就中斷,于是就去k8s上各種查找錯誤,但是nginx服務并沒有錯誤信息,nginx的error.log和access.log 都沒有錯誤信息。使用tcpdump抓包發現調用api如果有問題,就抓不到包。
九、與后端api同事聯調
因為在服務器上一直找不到原因,所以想著會不會是防火墻什么的對這個api做了特定的設置限流了,于是讓后端的同事重新寫了一個接口(就是換個名字),測試發現還是不行。想著是不是返回結果有敏感信息導致的,就讓后端的同時把api的結果寫死,不返回數據。結果測試發現竟然可以了。說明就是api的原因,然后后端同事一點點的注釋代碼測試發現是這個api又調用的其他服務的api,只有把這個調用注釋之后就沒問題。
十、繼續排查api的問題
雖然定位到是后端api的問題了,但是為什么這個api有時候可以有時候不可以,后端的同事還在排查,排查清楚之后我再更新。。。。。
浙公網安備 33010602011771號