解決跨域問題的幾種辦法

一、利用Jsonp

Jsonp是一種利用標籤實現跨域傳輸數據的方法。在ajax跨域請求時,json數據通過回調函數的方式傳遞迴來,從而實現跨域數據傳輸。

    
        function jsonp(url, callback){
            var script = document.createElement('script');
            script.src = url;
            document.head.appendChild(script);
            window.callback = function(data){
                callback(data);
                document.head.removeChild(script);
            };
        }
        
        jsonp('http://example.com/api/data?callback=callback', function(data){
            console.log(data);
        });
    

二、使用CORS(Cross-Origin Resource Sharing)

CORS是一種跨域資源共享的機制。通過在伺服器端設置Access-Control-Allow-Origin響應頭,來允許特定的源站點訪問指定的資源。

    
        // nodejs express伺服器設置CORS
        const express = require('express');
        const app = express();

        app.use(function(req,res,next){
            res.setHeader('Access-Control-Allow-Origin', 'http://example.com');
            res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
            res.setHeader('Access-Control-Allow-Methods', 'GET');
            next();
        });

        app.get('/api/data', function(req,res){
            res.json({data: 'hello'});
        });
 
        app.listen(3000);
    

三、使用nginx代理

通過在nginx伺服器上配置反向代理伺服器,來實現跨域請求。在nginx上添加一個location項,將請求轉發到目標伺服器,從而達到跨域效果。

    
        // nginx反向代理配置
        server {
            listen 80;
            server_name example.com;
            location /api {
                proxy_pass http://localhost:3000; // 目標伺服器地址
                add_header Access-Control-Allow-Origin http://example.com; // 設置允許跨域的源站點
                add_header Access-Control-Allow-Headers Content-Type; // 設置允許跨域的請求頭
                add_header Access-Control-Allow-Methods GET; // 設置允許跨域的請求方法
            }
        }
    

四、使用iframe

通過在頁面上嵌入一個隱藏的iframe,來進行跨域數據交互。在iframe中載入目標頁面,並將需要傳遞的數據作為url的參數傳遞過去。目標頁面通過讀取url參數,獲取傳遞的數據。

    
        // 發送方頁面
        

        var iframe = document.getElementById('iframe1');
        var data = {name: 'Tom', age: 18};
        iframe.src = 'http://example.com/receiver.html?' + encodeURIComponent(JSON.stringify(data));

        // 接收方頁面
        var data = JSON.parse(decodeURIComponent(window.location.search.substring(1)));
        console.log(data);
    

五、使用WebSocket

WebSocket是一種全雙工通信協議,能夠在不同的域名之間進行數據傳輸。通過在伺服器上部署WebSocket服務端,來實現跨域數據交互。

    
        // 前端WebSocket客戶端
        var socket = new WebSocket('ws://example.com');
        socket.onopen = function(){
            socket.send('Hello WebSocket!');
        };
        socket.onmessage = function(event){
            console.log(event.data);
        };

        // 後端WebSocket服務端
        const WebSocket = require('ws');
        const wss = new WebSocket.Server({port: 8080});
        wss.on('connection', function connection(ws){
            ws.on('message', function incoming(message){
                console.log('received: %s', message);
                ws.send('received');
            });
        });
    

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

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

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智慧等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示「文件中含有宏,保存將導致宏不可用」的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • Java Thread.start() 執行幾次的相關問題

    Java多線程編程作為Java開發中的重要內容,自然會有很多相關問題。在本篇文章中,我們將以Java Thread.start() 執行幾次為中心,為您介紹這方面的問題及其解決方案…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網路爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • NodeJS 建立TCP連接出現粘包問題

    在TCP/IP協議中,由於TCP是面向位元組流的協議,發送方把需要傳輸的數據流按照MSS(Maximum Segment Size,最大報文段長度)來分割成若干個TCP分節,在接收端…

    編程 2025-04-29
  • 如何解決vuejs應用在nginx非根目錄下部署時訪問404的問題

    當我們使用Vue.js開發應用時,我們會發現將應用部署在nginx的非根目錄下時,訪問該應用時會出現404錯誤。這是因為Vue在刷新頁面或者直接訪問非根目錄的路由時,會認為伺服器上…

    編程 2025-04-29
  • Python數據類型分為哪幾種

    Python作為一門非常靈活的編程語言,有著非常豐富的數據類型。Python的數據類型可以分為數字類型、字元串類型、列表類型、元組類型、字典類型和集合類型六種。 一、數字類型 Py…

    編程 2025-04-29
  • 如何解決egalaxtouch設備未找到的問題

    egalaxtouch設備未找到問題通常出現在Windows或Linux操作系統上。如果你遇到了這個問題,不要慌張,下面我們從多個方面進行詳細闡述解決方案。 一、檢查硬體連接 首先…

    編程 2025-04-29
  • Python折扣問題解決方案

    Python的折扣問題是在計算購物車價值時常見的問題。在計算時,需要將原價和折扣價相加以得出最終的價值。本文將從多個方面介紹Python的折扣問題,並提供相應的解決方案。 一、Py…

    編程 2025-04-28
  • Python存款買房問題

    本文將會從多個方面介紹如何使用Python來解決存款買房問題。 一、計算存款年限和利率 在存款買房過程中,我們需要計算存款年限和存款利率。我們可以使用以下代碼來計算存款年限和利率:…

    編程 2025-04-28

發表回復

登錄後才能評論