egg 設(shè)置跨域白名單

本人純前端,剛?cè)肟觘gg一個月,nodejs 小白,得益于 egg 的優(yōu)雅與強(qiáng)大,公司項目進(jìn)展得十分順利。我個人egg 的使用體驗跟 vue 一樣(詞窮),單純而美好。

跨域問題

寫服務(wù)端難免要考慮到跨域的問題,egg-cors 插件提供了 origin 的配置,給大家提供了便利。

egg-cors 開啟:


開啟插件

egg-cors 配置:


配置

這是目前用的比較多的插件,用來解決跨域問題。

但是我在實際項目中,有的需求并不能滿足,所以我覺得egg-cors 在配置上有一定的局限性。

orgin 參數(shù)只能設(shè)置一個域名,或者 ' * ',如果想要維護(hù)一個白名單,恐怕不支持;

設(shè)置成 ' * ' 允許所有域名跨域時,如果請求帶 withCredentials: true 參數(shù),還是有跨域問題。

為了解決以上問題,決定自己動手?jǐn)]一個插件 egg-origin。這是一個中間件,代碼非常簡單。

沒錯,以上就是全部要代碼了????


源碼

原理:每個請求過來的時候,拿到它的 origin,如果是在配置的白名單內(nèi),就手動設(shè)置 this.ctx.response.set('Access-Control-Allow-Origin', origin); 這樣就可以根據(jù)自己需求來配置跨域白名單。

使用方法:

使用上跟 egg-cors 一樣

egg-origin 開啟:


開啟插件

egg-origin 配置:


配置

這里 whiteList 參數(shù)可以設(shè)置域名,也可以直接設(shè)置成 [' * '],一定要是數(shù)組,也是為了保持跟 egg-cors 的相同的配置習(xí)慣。

這個插件其實是依賴于 egg-cors 的,我在默認(rèn)配置中添加了 egg-cors 的配置


默認(rèn)配置

egg-origin 設(shè)置的白名單,會覆蓋 egg-cors 的配置。站在巨人的肩膀上,才能看的更遠(yuǎn),感謝巨人。

后期迭代計劃

目前還只是支持完全匹配的模式,后面的迭代計劃包括配置 一級域名,所有的子域名都可以,還會加上 【黑名單】 配置,來過濾某些域名。

如果你覺得有用,請隨手給個小星星吧?????GitHub地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScri...
    cbw100閱讀 6,491評論 2 86
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,414評論 0 6
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    HeroXin閱讀 963評論 0 4
  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮,只允許與本...
    FLYSASA閱讀 1,892評論 0 6

友情鏈接更多精彩內(nèi)容