跨域產生的原因 解決前後端分離的跨域

2021-10-10 12:02:14 字數 2135 閱讀 2778

知道了產生的原因就知道為什麼那樣解決了

有乙個條件不同,我們都可以理解為存在跨域問題。

如果我們使用的 vue-cli2 來建立的 spa 應用,建立成功之後,在專案的 config 目錄下有乙個 index.js 檔案,在這個檔案中,我們可以進行請求**配置,如下圖:

配置內容如下:

module.exports = 

},'/ws/*':

},...

}

proxytable 就是我們配置的**路由表。這個裡邊我們一共配置了兩個規則:

第乙個是攔截所有 http 請求,將之**到後端伺服器上(前端預設埠是 8080),後端的埠是 8082。至於攔截規則 / ,大家可以自定義,根據實際情況來寫,例如所有的 http 請求都有乙個統一的字首 api,那麼這裡就可以寫 /api。

第二個是攔截所有的 websocket 請求進行**,我這裡給所有的 websocket 請求取了乙個統一的字首 /ws

相對來說,vue-cli2 在這裡的配置還比較容易。

vue-cli3 方案

vue-cli3 去年出來後,當時就嘗了一把鮮,但是可能 vue-cli2 用久了,一時半會還不願意接受 vue-cli3 ,於是嘗鮮完了之後就放下了,沒怎麼用了。直到前兩天,新專案嘗試了一下 vue-cli3,結果在請求**這塊就掉坑里了。

一開始沒多想,還是 vue-cli2 裡邊的老辦法,只不過是在 vue-cli3 建立的專案的 vue.config.js 檔案中進行配置,檔案位置如下圖:

注意,使用 vue-cli3 建立的 spa 應用,沒有 config 目錄了,因此請求**的配置我們要在 vue.config.js 這個配置檔案中來配置。

一開始我直接把 vue-cli2 中的請求**配置拷貝過來,這樣傳送 http 請求倒是沒問題,但是 websocket 請求一直有問題,後來經過仔細分析,發現這兩者在請求**配置上有一點點差異,我們來看看 vue-cli3 中的請求**配置(這也是我這裡 vue.config.js 檔案的完整內容);

let proxyobj = {};

proxyobj['/ws'] = ;

proxyobj['/'] =

};module.exports =

}

首先我們建立乙個 proxyobj 用來放各種**物件,至於**的內容這裡的則和 vue-cli2 中的沒有太多差異。要注意的是,http 請求**中,多了乙個屬性 ws: false,用過 vue-cli3 同學可能發現了,如果不加這個屬性,瀏覽器控制台會一直報連不上 socket 的錯,加上就沒事了。

最後在 devserver 中指定專案的 host 和 port ,然後再配置一下 proxy 物件就可以啦。

這就是我們在 vue-cli3 中請求的配置。

不過這裡的配置老實說沒有什麼難度,做過一次就會啦,要是沒做過,頭一次可能得折騰半天。

前後端分離如何解決跨域問題:

解決前後端分離的跨域問題

參考 跨域是網路安全領域的乙個專有名詞。簡單點理解就是某些操作越過了網域名稱的界限,訪問了別的網域名稱。如果指令碼可以自由訪問其他域,就會產生很多安全問題。什麼情況下會跨域?不同協議 不同網域名稱 不同埠 不同主機。什麼情況不是跨域?滿足網域名稱 協議 埠均相同的即不是跨域。解決方案 1 jsonp...

前後端分離專案,請求跨域解決

前端傳送請求,產生跨域問題 created 控制台報錯 在後端設定允許跨域請求 package com.demo.demobackend.config import org.springframework.context.annotation.bean import org.springframew...

前後端分離專案解決跨域問題

後台我使用的ssm框架搭建,前端使用vue cli腳手架完成。最開始我在後台寫了過濾器,但是前端請求資料的時候,能夠成功請求,可是在返回的時候報了如下錯誤 經過一番研究後,發現在前端其實就可以處理跨域的問題。步驟如下 在vue專案下的config資料夾下的 index.js 檔案中設定 var ur...