一個不相容的 JS 方法,讓你的網站發生崩潰
在開發前臺系統的過程中,遇到了一個很奇怪的問題:PC 端的請求都很正常,移動端瀏覽器的請求卻全部失敗,後來發現這是因為請求引數發生了丟失現象。
本文來源:魚立說。本文連結:https://www.yulisay.com/d/kobpr.html,支援微信瀏覽器開啟。
更多精彩文章,請移步 魚立說個人網站 翻看。歡迎欣賞,吐槽不足之處。
本文將圍繞 URL 查詢字串的序列化方法 URLSearchParams 展開內容,最終得出的結論是:在做相容多端網站開發時,需要謹慎使用 URLSearchParams 方法。
問題呈現
採用的是前後端分離模式,需要在前端頁面中對請求引數進行拼接,然後會向後端介面發出請求從而獲取資料。
在 PC 端結果很正常,在移動端瀏覽器中嘗試,發生瞭如下報錯,導致網站在移動端發生功能的全面崩潰:
分析問題
檢視 Ngin 請求日誌,發現很多下面的報錯:
[19/Jan/2021:11:44:58 +0800] "GET /api/method?a%2C123= HTTP/2.0" 403 ……
經過對 JS 中相關邏輯的排查,定位到,最初的方法如下:
obj2String: (obj) => {
let arr = [], index = 0;
for (let key in obj) {
arr[index++] = [key, obj[key]];
}
return new URLSearchParams(arr).toString();
}
解決問題
通過檢視 URLSearchParams 使用說明文件,發現它在瀏覽器相容性方面存在一些不足,如圖所示:
通過多次除錯,對 URL 查詢字串的拼接進行了優化處理,最終的方法如下:
obj2String: (obj) => {
let str = '';
for (let key in obj) {
if(str != '') str += '&';
str += key + "=" + obj[key];
}
return str;
}
此時,PC 端和移動端瀏覽器中恢復正常,網站也相容了多端的訪問。
擴充知識
querystring(查詢字串):NodeJS 自帶模組,用於解析和格式化 URL 查詢字串。
參考連結
相關文章
- GodBlessYou: 讓你的應用不再崩潰Go
- 測試必存!12種網站崩潰的原因及排查方法!網站
- 史上最坑爹的程式碼!個個讓人崩潰!
- 分享一個開發中捕獲崩潰的庫
- 讓 Chrome 崩潰的一行 CSS 程式碼ChromeCSS
- Qt程式繼承QApplication發生崩潰的原因QT繼承APP
- 讓程式設計師人崩潰的 99個瞬間...程式設計師
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- 神器 | 一個網站讓你找到高清 logo網站Go
- 崩潰的一天,西安一碼通崩潰背後的技術問題。
- 系統崩潰了,網站響應慢了,你是如何快速定位錯誤資訊的?網站
- iOS開發的底線-崩潰iOS
- 研招網崩了?網路崩潰的原因有哪些?怎麼維護網站?網站
- 5個高質量的自學網站,每天堅持一小時,讓你受益一生!網站
- 伺服器站點崩潰的原因有哪些伺服器
- 這個不起眼的“黑點”表情:讓所有安卓機秒崩潰安卓
- 能否讓APP永不崩潰—小光與我的對決APP
- app 崩潰的原因APP
- 記一次 .NET 某企業 ERP網站系統 崩潰分析網站
- 傳統APM讓開發者瞬間崩潰的三大問題!
- 這10個實用網站/app,至少讓你的效率翻一倍!網站APP
- 因為我的一個低階錯誤,生產資料庫崩潰了將近半個小時資料庫
- 資料庫崩潰恢復表結構的方法資料庫
- win10資源管理器不停的崩潰怎麼辦 資源管理器不停崩潰的方法Win10
- 記錄一個LifeCycle 多執行緒使用導致的崩潰執行緒
- 【轉】【譯】讓你的網站更炫酷的一些小 tips網站
- 絕地求生崩潰怎麼解決win10_win10絕地求生崩潰的解決方法Win10
- 【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案Cloud伺服器
- M1晶片Mac軟體問題:崩潰、閃退、不相容,解決方法出來了!晶片Mac
- [翻譯]Java排錯指南 - 5 確定崩潰何地發生Java
- MottoJS,一個讓你的“座右銘”更好玩的JS外掛JS
- WWDC 2018:理解崩潰以及崩潰日誌
- 一個網站的滲透測試思路,流程(給你一個網站,怎麼做?)網站
- 突發:當機崩潰OOMOOM
- 關於Mozilla崩潰的研究
- 《崩潰製造》挑戰你的平臺遊戲天分遊戲
- 網站經常崩潰,企業應該如何做好監控?網站
- iOS 避免常見崩潰(一)iOS