App下載

在react項目中怎么解決跨域問題?解決跨域問題的方法!

猿友 2021-06-18 17:49:17 瀏覽數(shù) (4945)
反饋

在我們的React相關(guān)知識學(xué)習(xí)中或多或少會在平時中聽到跨域問題,那么今天我們就來深入學(xué)習(xí)一下吧!來看看有關(guān)于“在react項目中怎么解決跨域問題?”這個問題的解決方法!下面是小編準備的一些相關(guān)信息,大家可以作為參考!


一.為什么會出現(xiàn)跨域?

因為我們的瀏覽器遵循同源政策(?scheme?(協(xié)議)、?host?(主機)、和?port?(端口))都是被稱為同源。有同源就有非同源,那么在非同源中有下面這些限制:不讀取和修改對方的DOM、不讀取和訪問對方的?Cookie? ,?IndexDB? 和 ?LocalStorage?、限制?XMLHttpRequest?請求。而且當(dāng)瀏覽器向目標路徑發(fā)送Ajax請求的時候,只要我們當(dāng)前的路徑和目標路徑不同源,則會產(chǎn)生跨域,也被稱為跨域請求。


二.解決方法

1.JSONP

jsonp是指服務(wù)器與客戶端跨源通信常用的方法,擁有簡單適用、兼容性好的特點,但是它有一個缺點就是只支持get請求不支持post請求。然而在?HTML?的標簽中有一些標簽是沒有跨域限制的,比如 ?script? 和?img?這兩個就是了。對于這個的方法的用法就是通過在網(wǎng)頁中添加一個?<script>?,然后在向服務(wù)器請求?json?數(shù)據(jù),等服務(wù)器收到請求之后,就會將這個數(shù)據(jù)放在一個指定名字通過回調(diào)函數(shù)的參數(shù)位置傳回來。


2.CORS

在這個方法中擁有普通跨域請求和帶?cookie?跨域請求。在普通跨域請求中:我們只需要在服務(wù)端設(shè)置?Access-Control-Allow-Origin?

,然而在帶cookie跨域請求中:前后端都需要進行設(shè)置(前端設(shè)置:根據(jù)?xhr.withCredentials?字段判斷是否帶有?cookie?)。


3.proxy

我們可以通過這個方法在?package.json?文件中使用?proxy?配置就可以解決跨域問題,代碼如下:

"proxy":{
    "/api":{
       "target":"http://xxx.xxx.com",
       "changeOrigin": true,
       "pathRewrite": {
        "^/api": ""
    }
     }
 }

代碼中的target是指接口的域名;?changeorigin?是指開啟代理;對于?pathRewrite?的話是指:可以看到我使用了/api來匹配請求接口的域名,而接口名稱是/admin/login,因此在實際請求中應(yīng)該寫成/api/admin/login,但是我實際請求的地址又是沒有?api?前綴的,因此需要通過?pathRewrite?重寫地址,將接口請求的時候前綴去除。


4.Nginx

在上面的方法中可以解決我們很多在開發(fā)中的跨域問題,但是卻無法解決生產(chǎn)環(huán)境上的跨域問題。這個方法的功能有這么幾種:http服務(wù)器(可以獨立提供http服務(wù))、虛擬主機(可以多個域名指向同一個服務(wù)器,而且服務(wù)器根據(jù)不同的域名把請求轉(zhuǎn)發(fā)到不同的應(yīng)用服務(wù)器)、方向代理(負載均衡,將請求轉(zhuǎn)發(fā)至不同的服務(wù)器).


總結(jié):

這就是今天有關(guān)于“在react項目中怎么解決跨域問題?”這個問題小編收集的內(nèi)容,當(dāng)然如果你有更好的方法可提出來和大家探討學(xué)習(xí),更多有關(guān)于react這方面的內(nèi)容我們都可以在React 教程中進行學(xué)習(xí)和了解。


參考資料:

JSONP與CORS相關(guān)內(nèi)容文章鏈接:https://blog.csdn.net/qq_38128179/article/details/84956552

Mac安裝nginx注意事項和流程鏈接:https://www.cnblogs.com/yy136/p/12690225.html


0 人點贊