前端proxy跨域,nginx显晶,后端跨域配置以及跨域原理簡(jiǎn)介

前言:跨域配置可以分為:前端配置贷岸,后端配置,nginx配置磷雇, 這里分別介紹

為什么會(huì)發(fā)生ajax跨域呢偿警?
  • 瀏覽器限制
    瀏覽器出于安全的考慮,當(dāng)它發(fā)現(xiàn)請(qǐng)求是跨域的時(shí)候唯笙,它會(huì)做一些校驗(yàn)螟蒸,如果校驗(yàn)不通過(guò),就會(huì)報(bào)跨域安全問(wèn)題崩掘。
  • 請(qǐng)求跨域
    所謂同源是指:域名七嫌、協(xié)議、端口相同
    如果發(fā)出去的請(qǐng)求不是本域的苞慢,協(xié)議诵原、域名、端口枉疼,任何一個(gè)不一樣皮假,瀏覽器就認(rèn)為是跨域的

前端配置:

jsonp:
利用script標(biāo)簽請(qǐng)求數(shù)據(jù)(不推薦)
存在問(wèn)題:只能發(fā)送get請(qǐng)求,接收數(shù)據(jù)和配置較為麻煩
利用node中間件proxy配置跨域(此處只介紹vite中的代理配置)
node proxy跨域原理圖
1636428866625.png
vite.config.js中
proxy: {
  1.如發(fā)送請(qǐng)求/api/xxx,此時(shí)請(qǐng)求攔/api
  '/api': {
    2.路徑轉(zhuǎn)發(fā),此時(shí)請(qǐng)求地址變?yōu)閔ttp://localhost:5001/api/xxxx
    target: 'http://localhost:5001',
    changeOrigin: true,//請(qǐng)求改變?cè)绰钗藭r(shí)nginx可以獲取到真實(shí)的請(qǐng)求ip
    3.路徑重寫,此時(shí)請(qǐng)求變成了http://localhost:5001/xxxx, 
    path.replace(/^/api/, ‘’)-->將請(qǐng)求地址中的api去除了
    rewrite: (path) => path.replace(/^/api/, ‘’)
  }
}
說(shuō)明:
請(qǐng)求攔截的前綴如請(qǐng)求地址中 http://localhost:5001/api
注意:請(qǐng)求域名必須為http://localhost:5001/才會(huì)進(jìn)行攔截(你本地訪問(wèn)頁(yè)面的起始地址)惹资,  如http://8.135.1.141/api則不會(huì)進(jìn)行攔截,所以需要配置跨域的話建議把url寫成:/api就行
如在 .env.serve-dev文件中設(shè)置VITE_APP_BASE_URL = '/api'

后端配置跨域(此處針對(duì)java后臺(tái))

網(wǎng)關(guān)處配置跨域(spring-gateway)
spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            # 允許攜帶認(rèn)證信息
            # 允許跨域的源(網(wǎng)站域名/ip)航闺,設(shè)置*為全部
            # 允許跨域請(qǐng)求里的head字段褪测,設(shè)置*為全部
            # 允許跨域的method, 默認(rèn)為GET和OPTIONS潦刃,設(shè)置*為全部
            # 跨域允許的有效期
            allow-credentials: true
            allowed-origins: "*"
            allowed-headers: "*"
            allowed-methods:
            - OPTIONS
            - GET
            - POST
            - PUT
            - DELETE
            #max-age: 3600
如果只是一個(gè)java服務(wù),沒(méi)有網(wǎng)關(guān)
給controller添加@CrossOrigin,如:
@CrossOrigin
public class TestController {
    
}

注意侮措,網(wǎng)關(guān)跨域配置和服務(wù)跨域配置只能寫一個(gè)不然會(huì)報(bào)多個(gè)跨域配置的問(wèn)題

利用nginx配置跨域和頁(yè)面壓縮(推薦)

這里貼上vue3-admin-template里的nginx配置
[root@iZwz9izs4qf3b81quqwp61Z http]# nginx-gzip-cors.conf
 server {
            listen 80 ;
            #頁(yè)面壓縮配置(1M->300K)
            location /vue3-admin-template{
                  #gzip模塊設(shè)置
                 #開啟gzip壓縮輸出
                 gzip on;
                 #最小壓縮文件大小
                 gzip_min_length 1k;
                 #壓縮緩沖區(qū)
                 gzip_buffers 4 16k;
                 #壓縮版本(默認(rèn)1.1,前端如果是squid2.5請(qǐng)使用1.0)
                 gzip_http_version 1.0;
                 #壓縮等級(jí)(1M能壓縮到300K左右,提高首頁(yè)加載速度)
                 gzip_comp_level 4;
                 #壓縮類型乖杠,默認(rèn)就已經(jīng)包含text/html分扎,所以下面就不用再寫了,寫上去也不會(huì)有問(wèn)題胧洒,但是會(huì)有一個(gè)warn畏吓。
                 gzip_types text/plain application/x-javascript application/javascript text/javascript text/xml text/css;
                 #選擇支持vary header,可以讓前端的緩存服務(wù)器緩存經(jīng)過(guò)gzip壓縮的頁(yè)面;
                 gzip_vary on;
                 root  /opt/nginx/html;
                 index index.html;;
            }
            #網(wǎng)關(guān)(請(qǐng)求跨域配置)
            location ^~/micro-service-api/ {
                    proxy_pass http://8.135.1.141:10156/;
                    #允許的請(qǐng)求頭
                    add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,POST,PUT,DELETE' always;
                    add_header 'Access-Control-Allow-Credentials' 'true' always;
                    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
                    add_header Access-Control-Allow-Headers $http_access_control_request_headers;
                    add_header Access-Control-Max-Age 3600;
                    # 頭轉(zhuǎn)發(fā)
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-Ip $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_connect_timeout 1000;
                    proxy_read_timeout 1000;
                    # 跨域配置
                    if ($request_method = OPTIONS ) { return 200; }
            }
            location /file/{
                 root  /opt/nginx/html;
            }

    }

總結(jié):

前端proxy跨域配置:當(dāng)后端和linux服務(wù)器中不做配置時(shí)墨状,進(jìn)行配置使用-->dev

優(yōu)點(diǎn):前端可以單獨(dú)進(jìn)行跨域配置,不用依賴于后端
缺點(diǎn):前端調(diào)試的時(shí)候頁(yè)面的路徑是localhost,無(wú)法直接獲取到請(qǐng)求的真實(shí)地址無(wú)法更好的調(diào)試

后端跨域配置:當(dāng)沒(méi)有服務(wù)沒(méi)有上nginx服務(wù)器上時(shí)使用-->dev,prod環(huán)境都可以使用菲饼;

nginx跨域配置(推薦):對(duì)原有的開發(fā)代碼無(wú)侵入性肾砂,且效率較高,特別是nginx的壓縮配置極大的提高了頁(yè)面首次的加載速度-->dev,prod宏悦;

這邊建議:配置跨域順序:nginx->后端(網(wǎng)關(guān)->服務(wù))->web

nginx,后端镐确,web 配置跨域只能配置一端,不然瀏覽器會(huì)報(bào)多個(gè)跨域頭的問(wèn)題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饼煞,一起剝皮案震驚了整個(gè)濱河市源葫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌派哲,老刑警劉巖臼氨,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異芭届,居然都是意外死亡储矩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門褂乍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)持隧,“玉大人,你說(shuō)我怎么就攤上這事逃片÷挪Γ” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵褥实,是天一觀的道長(zhǎng)呀狼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)损离,這世上最難降的妖魔是什么哥艇? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮僻澎,結(jié)果婚禮上貌踏,老公的妹妹穿的比我還像新娘。我一直安慰自己窟勃,他們只是感情好祖乳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秉氧,像睡著了一般眷昆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天隙赁,我揣著相機(jī)與錄音垦藏,去河邊找鬼。 笑死伞访,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轰驳。 我是一名探鬼主播厚掷,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼级解!你這毒婦竟也來(lái)了冒黑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勤哗,失蹤者是張志新(化名)和其女友劉穎抡爹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芒划,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冬竟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了民逼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泵殴。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拼苍,靈堂內(nèi)的尸體忽然破棺而出笑诅,到底是詐尸還是另有隱情,我是刑警寧澤疮鲫,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布吆你,位于F島的核電站,受9級(jí)特大地震影響俊犯,放射性物質(zhì)發(fā)生泄漏妇多。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一瘫析、第九天 我趴在偏房一處隱蔽的房頂上張望砌梆。 院中可真熱鬧,春花似錦贬循、人聲如沸咸包。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烂瘫。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坟比,已是汗流浹背芦鳍。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葛账,地道東北人柠衅。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像籍琳,于是被迫代替她去往敵國(guó)和親菲宴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    極客學(xué)院Wiki閱讀 7,249評(píng)論 0 3
  • 不知不覺(jué)易趣客已經(jīng)在路上走了快一年了,感覺(jué)也該讓更多朋友認(rèn)識(shí)知道易趣客呜达,所以就謝了這篇簡(jiǎn)介谣蠢,已做創(chuàng)業(yè)記事。 易趣客...
    Physher閱讀 3,423評(píng)論 1 2
  • 雙胎妊娠有家族遺傳傾向查近,隨母系遺傳眉踱。有研究表明,如果孕婦本人是雙胎之一嗦嗡,她生雙胎的機(jī)率為1/58勋锤;若孕婦的父親或母...
    鄴水芙蓉hibiscus閱讀 3,705評(píng)論 0 2
  • 晴天叁执,擁抱陽(yáng)光,擁抱你矮冬。雨天谈宛,想念雨滴,想念你胎署。 我可以喜歡你嗎可以啊 我還可以喜歡你嗎可以吆录,可是你要知道我們不可...
    露薇霜凝閱讀 1,220評(píng)論 1 2