Stories

List
Create Time

[JS] javascript中的原型鏈01 prototype&__proto__

先給出名詞的定義: 1、實例對象-被new出來對象稱之為實例對象 例如: const p1 = new Person() p1就是實例對象 2、普通對象-未經new,直接聲明的對象是普通對象 例如:const p2 = { name: "John" } p2就是普通對象 3、prototype, 中文翻譯:原型對象 4、__proto__ ,中文翻譯:原型 (英文可以讀作dunder

Create Time

[前端基礎] HTTP請求GET與POST

開發中同事問了我一個問題 Q: GET請求能不能用request body來傳遞數據? 這個問題的場景是,他們的前後端溝通需要攜帶複雜的參數,用POST方法的request body(key value)的形式傳參會更加明瞭,但又覺得不夠語義化,所以想到了GET + request body。 A: HTTP規範rfc2616中是沒有對GET方法的使用body做限制( HTTP 規範並

Create Time

[CSS] flex佈局+white-space: nowrap寬度異常

在flex佈局中,定義一行三列並列的3個div,其中2個div寬度寫定,第3個div隨着父容器寬度由flex自適應。這是個很常見的佈局,平常使用沒有啥問題。 現在在第3個div中放置一段長的純文本(文本內容單行放置寬度大於第3個div的寬度),且設置white-space: nowrap,此時就會出現第3個div的寬度被文本撐開,變為單行文本的寬度,而不受flex佈局的約束。且由於第3個div的寬

Create Time

[nginx] 一個CORS的漏洞修復

前端項目被掃描出了一個CORS漏洞,記錄一下漏洞的復現和修復。 首先要明確,這個問題出在哪裏。 我負責的系統是一個前後端分離的應用,前端部署使用Nginx做反向代理。對於前端應用來説client是瀏覽器,瀏覽器發起的請求都是通過nginx配置轉發到不同後端的服務器。 舉個例子,某個用户用瀏覽器瀏覽頁面,發起了4個請求: front.domain/api/auth/login - auth服務

Create Time

[axios] 版本升級,特性變更記錄(高版本post請求異常)

axios 原版本 0.19.2,升級到0.27.2 出現了部分post請求發送異常的情況。 經查發現雖然大版本號同為0,但是0.27.2的內部邏輯有變更。 (0.27.2版本去掉了一些0.19.2版本中的對config的兼容性處理),導致0.19.2中不規範的api使用方式在0.27.2中無法生效。 問題發生在使用類似於下面這種形式發送post請求。 axios.post(ur

Create Time

[axios] 實現頁面級批量取消請求

在請求發送階段(未取得返回結果時),前端(瀏覽器)取消請求,捕獲該狀態,並做異常攔截處理。 思路: 1、記錄每個請求的cancelToken。 2、在頁面路由更新時(從頁面A進入頁面B時)取消A頁面未完成的請求。 3、把"取消請求"的異常狀態做一個特殊的異常標記。 4、全局請求攔截器對這種特殊的異常標記做靜默處理。 代碼實現: 1、全局的請求實例攔截器中,增加配置,通

Create Time

[axios] axios發送 及 接收處理二進制數據

一、發送攜帶二進制數據的請求 在圖片上傳、文件上傳等場景中,需要發送payload為二進制數據的'POST'請求 注: 只要請求體中不是純 JSON 或字符串,而是包含或完全由二進制數據構成的內容 (如文件、音視頻、圖片),就需要發送payload為二進制數據的'POST'請求。 這裏的重點是設置headers,先介紹如何發送這種特殊的請求。 分別以 1.axios(config) , 2.

Create Time

[前端] webpack + craco項目遷移Rsbuild

對一個非rsbuild的既有項目,遷移到rsbuild,有兩種途徑;其一是用rsbuild官方工具新建空殼項目,將舊項目的代碼文件搬到新的殼項目中,並安裝項目需要的依賴項,編寫rsbuild.config.ts配置;其二是修改舊項目的依賴項,刪除無關依賴和無關配置,安裝rsbuild項目所用的依賴項,編寫rsbuild.config.ts配置。 pnpm i @rsbuild/core @r

Create Time

[登錄鑑權] cookie、session和token的實現和區別

前言: 本文中的用户端(client)約等於瀏覽器。 服務端就是sever。 cookie、session、token都是由sever生成,保存在client端。 三者最大的不同在於服務端對cookie、session、token的處理。 cookie 1、在client輸入賬號密碼,點擊登錄發送請求 a到sever,sever驗證賬號密碼通過,獲知用户信息。 2、這