React跨域詳細闡述

一、React跨域概述

跨域請求,即跨站請求,簡稱CORS。當你的應用程序在從一個域或端口上運行的資源中請求來自另一個域或端口上的資源時,Web瀏覽器會向前其他 Web 服務器發出 CORS 請求。在React應用程序中突破同源策略,從而能夠訪問來自第三方服務器的數據。

在React跨域過程中,主要使用的技術有JSONP、CORS、nginx、node.js等,各自的特點、使用場景以及優缺點不盡相同。

二、使用JSONP進行跨域

JSONP是一種主流的跨域解決方案,通過script元素加載一個跨域的js文件,這個js文件剛好是一個回調函數,通過回調函數接收數據,從而突破了瀏覽器同源策略。

    執行步驟如下:
    1.創建一個script標籤,指定一個帶有數據的url,callback參數是回調函數名。
    2.服務器接收到請求後,將數據封裝到回調函數中,返回jsonp格式的數據。
    3.客戶端瀏覽器解析jsonp數據,執行回調函數,得到數據

以下是JSONP跨域的示例代碼:

    <script>
        function loadScript(url, callback) {
            let script = document.createElement("script");
            script.type = "text/javascript";
            if (script.readyState) { //IE
                script.onreadystatechange = function() {
                    if (script.readyState === "loaded" || script.readyState === "complete") {
                        script.onreadystatechange = null;
                        callback();
                    }
                };
            } else { //Others
                script.onload = function() {
                    callback();
                };
            }
            script.src = url;
            document.head.appendChild(script);
        }

        function showData(data) {
            console.log(data);
        }
    
        loadScript("http://api.example.com/user?callback=showData");
    </script>

三、使用CORS進行跨域

使用CORS進行跨域請求可以解決大部分瀏覽器的跨域問題,在React中實現CORS跨域請求也非常簡單,只需要在服務端設置相關的頭信息即可。

以下是使用CORS進行跨域的示例代碼:

    fetch("https://api.example.com/user", {
        mode: "cors",
        credentials: "include",
        headers: {
            "Content-type": "application/json; charset=UTF-8",
            "Authorization": "Bearer " + localStorage.getItem('token')
        }
    }).then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log(error));

四、使用nginx反向代理實現跨域

nginx是一款高性能的HTTP和反向代理服務器,可以通過反向代理的方式實現跨域請求,其原理是通過Nginx監聽請求,在後端服務器執行完查詢操作後再將結果返回給前端。

以下是使用nginx實現跨域請求的示例代碼:

    location /api/ {
        proxy_pass http://api.example.com/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type, Authorization";
    }

五、使用Node.js中間件進行跨域請求

Node.js是一款基於事件驅動和非阻塞 I/O 的服務器端 JavaScript 環境,可以通過編寫中間件實現跨域請求,使用非常方便。

以下是使用Node.js中間件進行跨域請求的示例代碼:

    const express = require('express');
    const cors=require('cors');
    const app = express();
    app.use(cors());
    app.get('/', function (req, res) {
        res.send('Hello World!');
    });
    app.listen(3000, function () {
        console.log('App listening on port 3000!');
    });

六、總結

本文介紹了React中跨域請求的幾種解決方式:JSONP、CORS、nginx反向代理和Node.js中間件。儘管每種方法都有其獨特的優缺點和適用場景,但是我們可以根據具體的應用場景選擇最佳的解決方法。

原創文章,作者:VORZE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/333651.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VORZE的頭像VORZE
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • @uiw/react-amap介紹

    本文將詳細闡述@uiw/react-amap的使用方法和參數配置,以及如何在React應用中集成高德地圖組件。 一、@uiw/react-amap簡介 @uiw/react-ama…

    編程 2025-04-29
  • Webrtc音視頻開發React+Flutter+Go實戰PDF

    本文將從多個方面介紹如何使用React、Flutter和Go來進行Webrtc音視頻開發,並提供相應的代碼示例。 一、Webrtc音視頻開發介紹 Webrtc是Google開發的一…

    編程 2025-04-27
  • React簡書項目

    本文將從以下幾個方面介紹React簡書項目: 項目概述 組件分析 路由配置 Redux狀態管理 項目優化 一、項目概述 React簡書項目是一個類似於博客的Web應用,提供用戶撰寫…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形數據庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網絡。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • React-Icons:強大的圖標庫

    一、React-Icons的介紹 React-Icons 是一個可重用的 React 組件集合,構建了一組常見的圖標,可用於任何 React.js 項目。它為所有的圖標提供了友好的…

    編程 2025-04-25

發表回復

登錄後才能評論