精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于HTTP請求攔截,快速解決跨域和代理Mock

開發 開發工具
近幾年,隨著 Web 開發逐漸成熟,前后端分離的架構設計越來越被眾多開發者認可,使得前端和后端可以專注各自的職能,降低溝通成本,提高開發效率。

近幾年,隨著 Web 開發逐漸成熟,前后端分離的架構設計越來越被眾多開發者認可,使得前端和后端可以專注各自的職能,降低溝通成本,提高開發效率。

在前后端分離的開發模式下,前端和后端工程師得以并行工作。當遇到前端界面展示需要的數據,而后端對應的接口還沒有完成開發的情況時,需要一個數據源來保證前端工作的順利進行。

今天這篇文章,我們會介紹幾種常見的方法和其中存在的問題,并提出如何基于HTTP 請求攔截,快速解決跨域和代理 mock 問題的方案。

常見方法及問題

請求 mock 服務器

最常規的做法是維護一個提供靜態數據的 mock 服務器(它提供的數據稱為 mock 數據),前端請求 mock 服務器獲取數據即可,但這種靜態數據維護不便。

請求 AMP

更好的做法是有一個根據接口定義來自動生成數據的 mock 服務器,我們稱為AMP(接口管理平臺,API Manage Platform),前端請求該服務器獲取數據。

在這種場景下,如果有些接口已經完成開發,前端需要手動修改代碼去設置不同接口的請求地址。當接口數量較多時,這種方法會變得非常低效。因此, AMP 一般也會同時提供代理功能,也就是指前端仍請求 AMP,AMP 會根據接口完成情況來決定返回 mock 數據,還是將請求再次代理到真實的業務服務器獲取數據后返回。

但是這種方案的問題在于當涉及到需要角色權限驗證的接口時,登錄輸入用戶信息后在瀏覽器中會緩存 cookie,當訪問與登錄時同域名的接口時,瀏覽器會自動攜帶 cookie,由服務器解析 cookie 并鑒權后獲取對應權限的接口數據。前端一般是在本地啟動服務器進行開發,當業務服務器的接口完成開發,這時再采用請求 AMP 的方法切換接口數據,就會出現跨域的情況。

由于瀏覽器的安全機制決定跨域訪問時無法攜帶 cookie,并且無法通過代碼讀取 cookie,因此通過代碼傳遞 cookie 跨域不可行,而現有的解決方案也不***:

  • 如果在 AMP 額外增加模擬登陸的功能,會因為所有接口的權限固定不變,無法適配一個接口對不同角色有不同權限而返回相應的數據;而且一旦鑒權的接口功能變更、失效等情況發生,都需要重寫修改 AMP 的代理功能,代價較大。
  • 如果利用瀏覽器插件保存登陸信息、提供代理,則需要兼容不同瀏覽器,成本太高。

針對上述技術問題,本文提出了一種可跨瀏覽器,并在前端實現的不侵入業務代碼的代理方法。

基于 HTTP 請求攔截 實現前端接口代理

基于 HTTP 請求攔截實現前端接口的方式,從更底層的角度實現了接口開發完成前后的 mock 數據,及業務服務器真實數據之間的切換,并且解決了現有技術中由 HTTP 請求通過 AMP 代理到業務服務器產生跨域無法攜帶權限信息,導致無法按照角色權限返回請求數據的技術問題。

主要創新點

  • 在更底層基于 XMLHttpRequest 和 Fetch API 實現攔截代理,不需要考慮主流瀏覽器類型,和 JavaScript 依賴的工具庫;
  • 在前端實現代理,保留了登陸信息,無需額外處理鑒權問題;
  • 提供一種可以快速實現且可插拔的使用方式。

總的來說,這個方案提供了一種可快速實現,運行在前端瀏覽器中,且不依賴瀏覽器類型的請求代理方法。

設計思路

Web 前端開發一般使用 JavaScript 語言,瀏覽器環境的 HTTP 請求都是基于 Fetch API 或 XMLHttpRequest API 來實現的(基于前者的請求記做 xhr,后者記做 fetch),主流的 Javascript 開源工具庫如 Axios、Request 也是這樣。所以,我們的方案就是要通過在底層攔截 xhr 或 fetch,根據一定的判斷邏輯來實現前端代理功能。

實現方式

首先,重新封裝瀏覽器環境中原生的 XMLHttpRequest API 和 Fetch API。基本思路是將這兩個原生的 API 保存起來,添加到各自重新封裝的同名 API 中(記作新 API),為新 API 寫入與原生 API 中同名的方法和屬性,在攜帶請求參數的同名方法(比如下文中的 open 和 send)里加入攔截請求和代理的邏輯 ApiProxy,對外開放一個可配置該攔截邏輯的接口,用于配置針對不同的 HTTP 請求格式所請求數據的攔截和代理邏輯。

圖1:代理與AMP和終端業務的交互流程

ApiProxy 在這個過程中的主要作用和工作流程可以歸納為:

  1. 注冊攔截器。接收并攔截 HTTP 請求,解析該請求中的參數,這里的參數是指能在 AMP 中唯一標識該接口的參數,比如域名+請求方法(如 GET、POST 等)+路徑(如 https://service.com/user 中的/user)。
  2. 根據該參數生成發送 AMP 的請求。AMP 實時維護了 mock 服務器上存儲的接口以及業務服務器上存儲的真實接口的相關信息,包括接口的定義、域名、屬性、開發狀態等。
  3. AMP 根據請求查詢接口定義數據,如果接口存在且狀態是開發中,則返回根據接口定義生成的 mock 數據,否則返回特定響應標志,如圖 1 中的「{code:』200302』}」。
  4. Apiproxy 收到 AMP 的響應后判斷是否有特殊標志,沒有直接返回 mock 數據到原請求,有則表示后端接口開發完成,繼續發送原 HTTP 請求到后端服務器請求后端服務器存儲的真實數據,相當于沒有對原請求做任何處理。

和傳統的將 HTTP 請求發送給 AMP 不同的是 ,AMP 根據接口狀態判斷是根據請求直接返回 mock 數據,還是開啟代理將 HTTP 請求再發送給業務服務器(此時跨域訪問會丟失原始 HTTP 請求中瀏覽器攜帶的 cookie),不直接將 HTTP 請求發送給 AMP,而是對請求正式發出之前進行攔截,并解析其中的參數發送給 AMP,由 AMP 反饋接口狀態,若開發完成則將 HTTP 請求正式發送給業務服務器。因為沒有修改該請求,只是延遲發送,這樣就保持了原請求與業務服務器之間的所有鑒權等相關信息,由此解決了跨域訪問無法攜帶 cookie 的問題。

不同請求方式下 ApiProxy 的實現

由于不同請求方式的底層設計不同,我們相應的具體封裝手段也不同。

圖2:代理核心工作原理

XMLHttpRequest

對于 XMLHttpRequest 請求,在其 open 方法中解析請求,訪問 AMP 根據響應結果判斷是否需要繼續發送原請求到后臺服務器,一個 xhr 只有在其 send 方法被調用時才會真正的發起 HTTP 請求,而在 open 方法中無法獲取到 send 方法傳遞的數據,所以攔截發生在 send 方法中。首先單獨存儲 send 方法中發送請求時的參數,然后直接返回,確保先不調用真正的 XMLHttpRequest 的 send 方法,將單獨存儲的參數生成對 AMP 的請求,執行上述 AMP 中的判斷。

實例

1、定義與原生 XMLHttpRequest API 同名的接口,稱為新的 XHR 接口;

2、重命名原生 XMLHttpRequest API 并添加到新的 XHR 接口;

3、在新的 XHR 接口中定義與原生 XMLHttpRequest API 同名的屬性和方法;

4、在同名的 open 方法中解析 HTTP 請求,得到用來在 AMP 查詢接口狀態的參數(比如域名+請求方法+路徑);

5、攔截將要發送的原請求,在同名的 send 方法中暫存原請求要發送的數據,暫停原請求的發送;

6、用 4 中的參數請求 AMP,查詢接口狀態,如果接口不存在或是已完成狀態,則返回特殊標志,ApiProxy 取出 5 中暫存的數據,傳遞給原請求,并繼續原請求的發送;否則,AMP 返回 mock 數據,ApiProxy 直接將該數據返回給原請求。

Fetch API

對于 Fetch API 而言,因為它是基于 Promise 實現的,攔截比較容易,只需要在 Fetch API 外層封裝一個 Promise 入口,在其發起 fetch 請求前,先暫停原請求,解析數據請求 AMP,并等待響應,判斷響應是否有特殊響應碼,如果有則繼續原請求,否則跳過原請求,直接返回 mock 數據。

啟動前端代理功能

在前端實際開發中,可以借助打包工具,比如 webpack,自定義一個可配置的插件,開啟后在開發環境中自動將代理攔截代碼插入到主頁面里,從而啟動前端代理功能。

小結

本文提出的前端代理方法通過將代理職責下沉到前端,減少了 mock 服務器(或者接口管理平臺)請求真實業務服務器步驟,同時將角色權限保持在前端請求中,進一步減少了代理所需要承擔的工作量,從底層攔截 HTTP 請求的方法,繞過了利用瀏覽器插件做代理帶來的瀏覽器兼容的問題。***提供的利用打包工具(如 webpack)封裝這種代理方法,實現快速插拔的前端代理。

本文作者:鄧仲哲,馬蜂窩社區研發團隊前端開發工程師,主要負責社區管理后臺,接口管理平臺開發等工作。

附:參考資料

關于跨域:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

關于XMLHTTPRequest:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

關于Fetch:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

【本文是51CTO專欄作者馬蜂窩技術的原創文章,作者微信公眾號馬蜂窩技術(ID:mfwtech)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2024-08-28 08:45:22

2016-11-04 20:02:37

Apache

2019-04-10 10:32:16

CORSNginx反向代理

2019-04-16 10:05:11

2017-05-25 09:45:35

2023-11-17 09:38:21

2017-08-20 12:49:59

瀏覽器跨域服務器

2022-03-21 07:35:34

處理方式跨域

2021-04-27 15:20:41

人工智能機器學習技術

2021-06-10 18:11:02

Cors跨域Web開發Cors

2021-06-06 13:05:15

前端跨域CORS

2024-10-29 16:41:24

SpringBoot跨域Java

2024-05-20 09:28:44

Spring客戶端瀏覽器

2024-04-26 09:04:13

2022-04-01 12:38:32

cookie代碼面試

2022-04-29 09:11:14

CORS瀏覽器

2021-03-12 22:51:28

HTTP程序代碼

2018-01-26 08:39:03

2023-05-06 15:32:04

點贊
收藏

51CTO技術棧公眾號

成人一区二区免费视频| 精品国产二区在线| 日本少妇aaa| 欧美9999| 色综合激情久久| 天堂v在线视频| 日批免费在线观看| 性色一区二区| 久久中文久久字幕| 岛国精品一区二区三区| 日韩电影av| 又紧又大又爽精品一区二区| 欧美精品在线一区| 国产富婆一级全黄大片| 久久午夜精品| 久久久亚洲福利精品午夜| 免费视频91蜜桃| 99久久免费精品国产72精品九九 | 精品久久久久久亚洲综合网| 免费日韩视频在线观看| 直接在线观看的三级网址| 92精品国产成人观看免费| 国产在线视频一区| 国产精品suv一区| 欧美区日韩区| www.欧美免费| 人妻视频一区二区| 麻豆精品99| 欧美一区二区成人| 中日韩av在线播放| 成人性教育av免费网址| 亚洲二区在线观看| 99视频精品全部免费看| 幼a在线观看| 久久免费精品国产久精品久久久久| 国产日韩精品一区二区| 亚洲综合图片网| 一区二区三区福利| 久久久久久久久久国产| 三级影片在线看| 亚洲激情五月| 日韩中文在线观看| 国产又黄又粗视频| 欧美美女在线| 亚洲欧洲日产国码av系列天堂| 一级黄色片毛片| www.亚洲一二| 精品国产伦一区二区三区观看体验 | 欧美男体视频| 狠狠躁夜夜躁人人躁婷婷91| 国产69精品久久久久999小说| 日韩123区| 一区二区三区在线免费播放| 久久国产精品免费观看| 毛片在线不卡| 亚洲人被黑人高潮完整版| 一区二区欧美日韩| 欧美成人视屏| 亚洲三级电影网站| 今天免费高清在线观看国语| 成人免费看片| 亚洲免费av观看| 久久久久久久久影视| 影音先锋中文在线视频| 一二三区精品福利视频| www.国产在线视频| 成人观看网址| 91国偷自产一区二区使用方法| 日韩中文字幕二区| 草莓视频成人appios| 欧美日韩亚洲丝袜制服| 在线免费看污网站| 精品一区二区三区四区五区| 亚洲精品在线观看视频| 天堂久久久久久| 精品大片一区二区| 中文字幕欧美日韩在线| 91精品国产闺蜜国产在线闺蜜| 欧美国产免费| 91精品国产99| 中文字幕1区2区3区| 国产精品香蕉一区二区三区| 国产一区二区三区四区hd| 免费看男男www网站入口在线| 欧美国产日本韩| 资源网第一页久久久| 牛牛电影国产一区二区| 日韩欧美黄色动漫| 伊人影院综合在线| 日韩在线观看中文字幕| 亚洲欧美日韩国产成人| 午夜国产小视频| 亚洲精品九九| 成人亚洲欧美一区二区三区| 好吊视频一二三区| 国产欧美日韩卡一| 国产精品久久久久久久久电影网| 天堂中文最新版在线中文| 欧美日韩第一区日日骚| 中文字幕人妻一区二区三区| 欧美一区三区| 久久久久久久久久久亚洲| 国产真人无遮挡作爱免费视频| 精品一区二区三区在线观看| 精品欧美日韩在线| 国产日产一区二区三区| 欧美视频精品一区| 色哟哟在线观看视频| 国产精品欧美日韩一区| 久久久久久久爱| 国产一区二区三区中文字幕 | 免费黄色在线视频| 永久亚洲成a人片777777| 国产z一区二区三区| av中文字幕播放| 国产欧美一区二区精品秋霞影院 | 久久蜜桃精品| 国产精品免费观看高清| 免费观看久久久久| 91国在线观看| 国产精品1000部啪视频| 好吊视频一区二区三区四区| 国产日韩视频在线观看| 国产私人尤物无码不卡| 亚洲成人7777| 久久久久亚洲av无码专区首jn| 成人羞羞视频在线看网址| 91国偷自产一区二区三区的观看方式| 国产免费黄色大片| 国产精品无人区| 中文字幕无码不卡免费视频| 巨人精品**| 欧美高清在线播放| 国产女人高潮时对白| 国产精品免费久久| 另类小说第一页| 国产成人1区| 青青在线视频一区二区三区| 色哟哟中文字幕| 亚洲第一福利视频在线| 黄色性视频网站| 极品少妇一区二区三区| 春色成人在线视频| 91网址在线观看| 91精品国产91久久综合桃花 | 国产精品视频久久久久| 国产乱子伦三级在线播放| 一本到高清视频免费精品| 欧美熟妇精品黑人巨大一二三区| 亚洲黄色一区| 国内精品**久久毛片app| 欧美家庭影院| 精品国产乱码久久久久久图片 | 精品卡一卡二卡三卡四在线| 放荡的美妇在线播放| 国产麻豆成人精品| 国产精品视频一二三四区| 91精品短视频| 8x拔播拔播x8国产精品| 三级在线视频| 日本精品一区二区三区高清 | 女生裸体视频一区二区三区| 91久久精品久久国产性色也91| 黄色网在线免费观看| 欧美一级二级三级蜜桃| 欧美精品99久久久| jiyouzz国产精品久久| 国产中文字幕视频在线观看| 中国av一区| 国产精品丝袜高跟| 尤物视频在线看| 精品香蕉一区二区三区| 成人午夜精品视频| 亚洲少妇最新在线视频| 国产一精品一aⅴ一免费| 国产日韩精品视频一区二区三区 | 91精品福利在线一区二区三区 | 色婷婷亚洲综合| 青青青手机在线视频| 国产剧情一区二区三区| 日韩小视频在线播放| 国产剧情在线观看一区| 成人精品一区二区三区电影黑人| 金瓶狂野欧美性猛交xxxx| 国产偷亚洲偷欧美偷精品| 人妻中文字幕一区二区三区| 亚洲免费av在线| 爱爱的免费视频| 久久精品国产精品亚洲综合| 高清无码视频直接看| 国产一区不卡| 91手机在线观看| 成人国产二区| 久久6免费高清热精品| 欧美18xxxxx| 日韩欧美一二区| 国产三级理论片| 亚洲成人1区2区| 午夜国产小视频| 久久久久久久性| 亚洲熟女乱综合一区二区| 天堂在线亚洲视频| 中文字幕人妻熟女人妻洋洋| 欧美伦理在线视频| 国产一区精品视频| gogo大尺度成人免费视频| 欧美亚洲视频在线看网址| 最爽无遮挡行房视频在线| 亚洲人成伊人成综合网久久久| 国产美女明星三级做爰| 91高清视频在线| 日本在线观看中文字幕| 亚洲欧洲另类国产综合| 一区二区精品免费| av电影在线观看不卡| 久久精品亚洲天堂| 青椒成人免费视频| 国产午夜伦鲁鲁| 国内精品美女在线观看| 女女同性女同一区二区三区按摩| 国产日韩欧美一区二区三区| 国产一区二区久久久| 国产日韩在线观看视频| 国产精品吹潮在线观看| 手机在线观看av网站| 久久久中文字幕| 中文字幕在线三区| 久久久精品久久久| 日本激情视频在线观看| 中文国产亚洲喷潮| 国产对白叫床清晰在线播放| 日韩精品在线观看网站| 蜜桃av中文字幕| 日韩欧美色综合| 99精品免费观看| 91精品国产色综合久久ai换脸 | 精品一区二区在线看| 国产又猛又黄的视频| 日韩电影一二三区| www.色就是色| 秋霞电影网一区二区| 亚欧在线免费观看| 日韩电影一区二区三区四区| 国产无套粉嫩白浆内谢的出处| 亚洲免费综合| 国产女女做受ⅹxx高潮| 玖玖精品视频| 三级在线视频观看| 久久爱另类一区二区小说| 成人亚洲精品777777大片| 免费观看在线综合| 老司机久久精品| 国产一区二区久久| 18禁一区二区三区| 成人av在线资源| 中文精品在线观看| 国产网站一区二区| 天堂久久精品忘忧草| 国产欧美在线观看一区| 亚洲一二三四视频| 亚洲日本中文字幕区| 久久精品这里只有精品| 亚洲v精品v日韩v欧美v专区| 国产 日韩 欧美 在线| 一本大道久久a久久精二百| 欧美成人精品网站| 日韩视频中午一区| 神马久久久久久久久久| 亚洲人成亚洲人成在线观看| 午夜视频在线看| 欧美极度另类性三渗透| 九色porny丨入口在线| 国产精品com| 精品国产一级| 久久av一区二区三区漫画| 精品日韩一区| 日韩精品久久一区二区| 国产亚洲一级| 高清一区在线观看| 粉嫩aⅴ一区二区三区四区| 色婷婷免费视频| 国产精品水嫩水嫩| 日产精品久久久久| 欧美性一二三区| 黄色成人一级片| 亚洲一级片在线看| 日本在线视频中文有码| 欧亚精品中文字幕| 国产一精品一av一免费爽爽| 国产在线一区二区三区四区| 日韩dvd碟片| 国产3p露脸普通话对白| 老司机精品视频在线| 国产精品一区二区无码对白| 日本一区二区在线不卡| 久久精品久久精品久久| 欧美在线观看你懂的| 丰满人妻熟女aⅴ一区| 这里只有精品视频在线| а√天堂资源官网在线资源| 国产精品揄拍500视频| 国产精东传媒成人av电影| 亚洲精品白虎| 亚洲欧美日韩国产一区二区| 亚洲黄色av片| 国产午夜亚洲精品不卡| 国产一级视频在线播放| 欧美人牲a欧美精品| 美州a亚洲一视本频v色道| 欧美激情女人20p| 免费成人黄色网| 欧美自拍资源在线| 99热这里只有成人精品国产| 日本女人黄色片| 一区在线中文字幕| 天天爱天天做天天爽| 亚洲电影中文字幕| a篇片在线观看网站| 国产在线观看精品一区二区三区| 亚洲精品国产setv| 999一区二区三区| 国产精品一区久久久久| 久久视频一区二区三区| 一本色道久久加勒比精品 | 中文字幕在线观看精品| 亚洲美女av在线播放| 波多野结衣精品| 成人av免费看| 中文字幕午夜精品一区二区三区| www.亚洲高清| 日本一区二区综合亚洲| 色老头在线视频| 亚洲欧洲午夜一线一品| 厕沟全景美女厕沟精品| 麻豆传媒一区| 午夜一级久久| 在线免费观看a级片| 偷拍亚洲欧洲综合| 日本xxxxwww| 97久久精品国产| 欧美人妖在线观看| 免费在线观看亚洲视频| 99久久国产综合精品色伊| 日本少妇在线观看| 亚洲电影在线观看| 亚洲免费福利| 日本一区二区在线视频| 日韩国产精品91| 欧美日韩中文字幕视频| 欧美中文字幕不卡| 欧美精品电影| 91在线精品观看| 国产精品地址| 粉嫩av懂色av蜜臀av分享| 欧美日韩一区免费| 黄色在线小视频| 国产精品视频播放| 欧美一区在线看| 亚洲一级Av无码毛片久久精品| 亚洲一区二区三区不卡国产欧美| 天天干天天做天天操| 日本高清不卡的在线| 欧美日韩有码| 中文字幕第三区| 亚洲午夜电影在线观看| 日本啊v在线| 国产精品亚洲视频在线观看| 在线一区免费| 97精品人妻一区二区三区蜜桃| 欧美日韩中文在线| 777电影在线观看| 99re视频在线观看| 国产精品五区| 国产免费一区二区三区四区| 精品美女一区二区| 天天综合网站| 无码毛片aaa在线| 99re免费视频精品全部| 亚洲图片欧美在线| 色中色综合影院手机版在线观看 | 国产成都精品91一区二区三| 日韩欧美亚洲一区二区三区| 一区二区三区久久精品| 国产一区二区三区亚洲综合| 免费看国产曰批40分钟| 日本一区二区三级电影在线观看| 国产毛片毛片毛片毛片| 57pao成人永久免费视频| 日韩欧美网址| 国产又粗又长又爽| 91麻豆精品国产91久久久久| 华人av在线| 色中文字幕在线观看| 91在线精品一区二区三区| 在线观看一二三区| 欧美诱惑福利视频| 欧美xxx在线观看| 欧美性受xxxx黑人| 亚洲成色777777在线观看影院| 精品免费av在线|