精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91豆麻精品91久久久久久| 成人精品视频一区| 久久亚洲精品网站| 亚洲午夜久久久久久久久| 亚洲欧美韩国| 国产精品国产三级国产有无不卡 | 久久国产三级| 亚洲大片精品永久免费| 午夜一区二区三区| 免费观看国产精品| 蜜臀国产一区二区三区在线播放| 欧美激情精品在线| 一级特黄曰皮片视频| 一区二区中文字幕在线观看| 色婷婷精品久久二区二区蜜臂av| 免费的一级黄色片| 91在线网址| gogo大胆日本视频一区| 91精品啪aⅴ在线观看国产| 日韩欧美不卡视频| 久久中文字幕av| 日韩成人高清在线| 欧美老女人bb| 亚洲视频资源| 欧美在线免费视屏| 免费观看美女裸体网站| 18av在线视频| 中文字幕日韩精品一区| 欧美一区国产一区| 人妻一区二区三区| 国产福利一区在线观看| 国产精品亚发布| 日韩福利片在线观看| 综合av在线| 美女av一区二区| 极品色av影院| 久久精品国产68国产精品亚洲| 日韩精品中文字幕在线播放| 女同性αv亚洲女同志| 99视频有精品高清视频| 欧美日韩国产精品自在自线| 国产欧美高清在线| 蜜桃视频在线网站| 亚洲成人高清在线| 99热亚洲精品| 欧美6一10sex性hd| 亚洲一区二区在线观看视频| 7777在线视频| 亚洲七七久久综合桃花剧情介绍| 国产精品久久久久aaaa樱花| 亚洲欧洲另类精品久久综合| 成人亚洲综合天堂| 欧美国产禁国产网站cc| 日韩av一级大片| 成人动漫在线免费观看| 中文欧美字幕免费| 一区二区在线观| 欧美尤物美女在线| 亚洲少妇中出一区| 日本天堂免费a| 日本高清在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 欧美中文字幕在线观看视频| 久久久久黄久久免费漫画| 亚洲午夜三级在线| 欧美国产亚洲一区| 精品国模一区二区三区| 欧美视频在线观看一区| 日本黄色福利视频| 亚洲不卡视频| 亚洲缚视频在线观看| 野花社区视频在线观看| 久草精品在线| 色婷婷综合成人av| 久久精品欧美一区二区| 亚洲一区中文| 国产精品丝袜一区二区三区| 国产三级小视频| 不卡一区二区中文字幕| 欧美一区2区三区4区公司二百| 成人在线高清视频| 亚洲精品免费看| 浮妇高潮喷白浆视频| 精品视频一区二区三区四区五区| 欧美区一区二区三区| 亚洲性图第一页| 自拍视频一区| 久久精品最新地址| 一区二区三区视频免费看| 日韩和欧美一区二区| 91久久精品美女高潮| 欧美视频久久久| 国产欧美一区在线| 8x8ⅹ国产精品一区二区二区| 周于希免费高清在线观看| 欧美高清一级片在线| 欧美做受高潮中文字幕| 成人影视亚洲图片在线| 欧美日韩爱爱视频| 91麻豆精品在线| 丁香天五香天堂综合| 亚洲成人蜜桃| 涩涩涩在线视频| 在线观看一区二区视频| 国产日韩视频一区| 日本大胆欧美| 日本免费久久高清视频| 国产成人毛毛毛片| 欧美激情在线看| 欧美精品久久久久久久久久久| 亚洲国产天堂| 亚洲欧洲日产国码av系列天堂| 四虎免费在线视频| 麻豆精品精品国产自在97香蕉| 国产日韩精品久久| 黄黄的网站在线观看| 在线亚洲人成电影网站色www| 中文字幕人妻一区| 91tv官网精品成人亚洲| 日本一区二区三区在线播放| www.色视频| 中文字幕一区二区日韩精品绯色| 欧美成人精品欧美一级乱| 国产精品qvod| 欧美日韩成人在线观看| 91尤物国产福利在线观看| 国产日韩精品一区二区三区在线| 成人毛片一区二区| 大奶在线精品| 欧美日韩成人在线观看| 国产成人三级在线播放| 国产精品美女久久久久久久久久久 | 亚洲在线久久| 国产综合久久久久| av大片在线播放| 在线观看三级视频欧美| 久久亚洲AV成人无码国产野外| 亚洲高清激情| 国产另类自拍| 女囚岛在线观看| 欧美大肚乱孕交hd孕妇| 青娱乐国产在线| 国产成人在线色| 无码日本精品xxxxxxxxx| 日本高清精品| 久久久亚洲成人| 色综合久久久久久| 婷婷丁香一区二区三区| 美女网站久久| 欧美激情论坛| 91精品店在线| 日韩在线观看网站| 国产一区二区视频免费观看| 18涩涩午夜精品.www| 久久精品一二三四| 精品av久久久久电影| 国产伦精品一区二区三毛| caoporn视频在线| 精品亚洲一区二区| 成人黄色三级视频| 国产精品麻豆99久久久久久| 樱花草www在线| 欧美天堂亚洲电影院在线观看| 91免费观看网站| 欧美男男video| 日韩av中文字幕在线播放| 黄色片视频免费| 中文在线一区二区| 黑人巨大猛交丰满少妇| 亚洲日本视频| 先锋影音欧美| 综合中文字幕| 国产福利视频一区| 国产剧情在线| 日韩成人免费视频| 在线视频播放大全| 亚洲综合色噜噜狠狠| 日本黄色片在线播放| 日本成人在线一区| 超级碰在线观看| 日韩高清三区| 成人黄色在线免费| 51av在线| 综合欧美国产视频二区| 亚洲国产精品成人久久蜜臀| 欧美日韩在线影院| 特级西西人体高清大胆| 国产成人午夜精品5599| 日韩一级免费在线观看| 欧美a级在线| 欧美福利一区二区三区| 亚洲伊人精品酒店| 91超碰中文字幕久久精品| 97视频精彩视频在线观看| 欧美精品一区二区三区视频 | 色婷婷av一区二区三区大白胸| 亚洲AV成人无码网站天堂久久| 成人综合在线网站| 美女喷白浆视频| 亚洲天堂激情| 亚洲欧洲日本国产| 日韩在线麻豆| 亚洲最大的av网站| 午夜精品久久久久久久久久蜜桃| 久热精品在线视频| 国产天堂素人系列在线视频| 精品久久久久久无| 亚洲在线精品视频| 色综合久久精品| 久久高清免费视频| 亚洲少妇30p| 五月婷六月丁香| 91免费看片在线观看| 人妻互换一二三区激情视频| 久久国产精品色婷婷| 日本成年人网址| 伊人久久亚洲美女图片| 米仓穗香在线观看| 清纯唯美亚洲综合一区| 免费看污久久久| 福利在线一区| 成人动漫视频在线观看完整版| 亚洲精品一区二区在线播放∴| 日韩av免费看网站| 国产乱码精品一区二三赶尸艳谈| 美女少妇精品视频| 黄色在线论坛| 日韩亚洲欧美中文在线| 国产黄在线观看免费观看不卡| 日韩激情视频在线| 四虎精品一区二区三区| 欧美成人女星排行榜| 99国产精品久久久久99打野战| 欧美吞精做爰啪啪高潮| 九九热最新视频| 色屁屁一区二区| 国产主播第一页| 一本一道波多野结衣一区二区| 特一级黄色大片| 精品国产乱码久久久久久虫虫漫画| 免费在线观看一级片| 亚洲免费在线观看视频| 999精品视频在线观看播放| 中文字幕av免费专区久久| 午夜黄色福利视频| 国产精品福利一区二区三区| 蜜桃av免费在线观看| 亚洲欧美在线aaa| 天天综合天天做| 亚洲精品高清在线| 久久久精品国产sm调教网站| 亚洲国产精品久久艾草纯爱| 日韩经典在线观看| 欧美视频专区一二在线观看| 久久久久99精品成人片我成大片| 色老汉一区二区三区| 中文字幕网址在线| 欧美色爱综合网| 国产农村妇女毛片精品| 日韩欧美电影在线| 熟妇人妻系列aⅴ无码专区友真希| 日韩精品极品在线观看| 国产小视频在线观看| 日韩视频一区在线| 伊人精品影院| 777777777亚洲妇女| 香蕉久久免费电影| 成人午夜小视频| 精品成人自拍视频| 日韩美女一区| 亚洲成人tv| 131美女爱做视频| 人人精品人人爱| 捷克做爰xxxⅹ性视频| 成人午夜在线播放| 熟女俱乐部一区二区| 国产精品嫩草99a| 久久久精品99| 欧美三级电影在线看| 性生交生活影碟片| 亚洲欧美制服第一页| 国产成人无吗| 欧美一区第一页| 久久av网站| 女同一区二区| 欧美另类综合| 亚洲精品一二三四五区| 国产aⅴ精品一区二区三区色成熟| 中文字幕xxx| 亚洲欧美偷拍另类a∨色屁股| 日韩av在线播| 欧美精品九九99久久| 少妇高潮一区二区三区99小说| 在线观看亚洲区| av资源一区| 国产日韩欧美中文在线播放| 欧美巨大xxxx| 欧美日韩dvd| 日本视频中文字幕一区二区三区| 香蕉久久久久久av成人| 国产精品全国免费观看高清| 国产精品第56页| 欧美一级理论性理论a| 免费一级在线观看播放网址| 色综合五月天导航| 欧美成a人片免费观看久久五月天| 国产精品一区二区三区观看| 青青草国产免费一区二区下载| 欧美日韩二三区| 国产超碰在线一区| 疯狂试爱三2浴室激情视频| 色88888久久久久久影院野外 | 国产亚洲成精品久久| 欧美78videosex性欧美| 成人黄色免费在线观看| 欧美亚洲激情| 国内外免费激情视频| 成人免费毛片片v| 亚洲成人生活片| 7777精品伊人久久久大香线蕉完整版| 三区在线视频| 97久久精品人人澡人人爽缅北| 欧美不卡在线观看| 午夜啪啪免费视频| 男男成人高潮片免费网站| 玖玖爱在线观看| 精品欧美激情精品一区| 女人18毛片一区二区三区| 欧美激情va永久在线播放| 99tv成人影院| 糖心vlog在线免费观看| 国产麻豆一精品一av一免费| 无码黑人精品一区二区| 欧美日韩视频在线一区二区| h网站视频在线观看| 国产精品吹潮在线观看| 欧美精品乱码| 超碰在线人人爱| 中文无字幕一区二区三区| 波多野结衣电车| 亚洲午夜未删减在线观看 | av一区观看| 欧美激情无毛| 国产免费一区二区三区最新6| 亚洲一级二级在线| 刘玥91精选国产在线观看| 欧美激情精品久久久久久大尺度 | 欧美一级黄色大片| 2024最新电影在线免费观看| 91成人免费观看| 欧美日本久久| 在线免费观看a级片| 色综合视频在线观看| 国产毛片av在线| 国产日韩精品综合网站| 天天做天天爱天天综合网| 精产国品一区二区三区| 亚洲一区二区三区四区在线观看 | 91久久夜色精品国产按摩| 中文字幕在线观看日| 亚洲精品乱码久久久久久| 丰满肉嫩西川结衣av| 68精品国产免费久久久久久婷婷| 综合色就爱涩涩涩综合婷婷| 国产一级特黄a大片免费| 一区二区中文视频| 风流少妇一区二区三区91| 欧美性受xxxx黑人猛交| 不卡中文一二三区| 永久免费黄色片| 午夜在线成人av| 国产精品一级伦理| 91亚洲精品在线观看| 亚洲第一网站| 日韩毛片无码永久免费看| 91精品在线一区二区| 国产美女精品写真福利视频| 日本一区二区三区四区在线观看| 久久国产夜色精品鲁鲁99| 国产污视频在线看| 国产亚洲视频在线| 一区二区免费| 亚洲人成无码www久久久| 亚洲色图欧洲色图| 日韩大胆人体| 91沈先生作品| 久久久亚洲人| xxxx日本少妇| 亚洲人在线视频| 中文字幕日韩高清在线| 欧美丰满熟妇xxxxx| 一区二区免费看| 波多野结衣在线影院| 成人91免费视频| 蜜臀久久99精品久久久久宅男| 国产一级片免费| 精品国产美女在线| 日韩aaa久久蜜桃av| 亚洲一区二区三区三州| 欧美在线免费播放|