最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析JavaScript如何解決跨域問題并手寫一個jsonp

 更新時間:2024年03月20日 11:17:36   作者:和小王學(xué)前端  
跨域是指瀏覽器為了安全性,實施的同源策略,同源策略要求,只有協(xié)議、域名和端口號完全相同的網(wǎng)頁,才能共享資源,本文整理了一些常用的跨域解決方法,希望對大家有所幫助

跨域是指瀏覽器為了安全性,實施的同源策略。同源策略要求,只有協(xié)議、域名和端口號完全相同的網(wǎng)頁,才能共享資源。如果不滿足這些條件,就會產(chǎn)生“跨域”。

解決跨域的常見方法有以下幾種:

1.CORS(跨源資源共享) :服務(wù)器設(shè)置相應(yīng)的 HTTP 頭部 Access-Control-Allow-Origin。這是最常用的跨域解決方案。

// 服務(wù)器端設(shè)置 HTTP 頭部

res.setHeader('Access-Control-Allow-Origin', '*');

2.JSONP(JSON with Padding) :通過動態(tài)創(chuàng)建 <script> 標(biāo)簽來調(diào)用服務(wù)器提供的回調(diào)函數(shù)。這種方法只能用于 GET 請求。

// 客戶端
function handleResponse(data) {
  console.log(data);
}
const script = document.createElement('script');
script.src = 'http://www.domain.com?callback=handleResponse';
document.body.insertBefore(script, document.body.firstChild);

// 服務(wù)器端
res.end(`handleResponse(${JSON.stringify(data)})`);

3.代理服務(wù)器:通過后端服務(wù)器轉(zhuǎn)發(fā)請求和響應(yīng),避免瀏覽器直接請求不同源的資源。

// Node.js 服務(wù)器端
const request = require('request');
app.get('/proxy', function(req, res) {
  const url = 'http://www.domain.com' + req.url;
  req.pipe(request(url)).pipe(res);
});

4.PostMessage:HTML5 引入的一種新的 API,可以實現(xiàn)跨源通信。

// 頁面 A
window.postMessage('message', 'http://www.domain-b.com');

// 頁面 B
window.addEventListener('message', function(event) {
  if (event.origin !== 'http://www.domain-a.com') return;
  console.log(event.data);
}, false);

5.WebSockets:WebSockets 是一種通信協(xié)議,由于其是雙向通信,且在建立連接后可以直接發(fā)送數(shù)據(jù),因此不受同源策略限制。

以上就是解決跨域問題的常見方法,需要根據(jù)具體的場景和需求來選擇合適的方法。

JSONP(JSON with Padding)是一種跨域數(shù)據(jù)交互的方法。它的基本思想是,網(wǎng)頁通過添加一個 <script> 標(biāo)簽,向服務(wù)器請求 JSON 數(shù)據(jù),這種做法不受同源策略限制;服務(wù)器收到請求后,將數(shù)據(jù)放在一個指定名字的 JavaScript 函數(shù)中返回。

以下是一個 JSONP 的基本實現(xiàn):

// 客戶端
function jsonp(url, callback) {
    // 創(chuàng)建 script 標(biāo)簽并加入到頁面中
    var script = document.createElement('script');
    script.type = 'text/javascript';

    // 創(chuàng)建一個全局函數(shù),并將函數(shù)名傳給服務(wù)器請求
    var callbackName = 'jsonp_callback_' + Math.random().toString().replace('.', '');
    window[callbackName] = function(data) {
        // 在這個全局函數(shù)中處理服務(wù)器返回的數(shù)據(jù)
        callback(data);

        // 數(shù)據(jù)處理完后刪除此函數(shù)及 script 標(biāo)簽
        delete window[callbackName];
        document.body.removeChild(script);
    }

    // 設(shè)置請求 URL
    script.src = url + '?callback=' + callbackName;
    document.body.appendChild(script);
}

// 使用 JSONP
jsonp('http://www.example.com', function(data) {
    console.log(data);
});

在這個例子中,客戶端創(chuàng)建了一個全局函數(shù),并將函數(shù)名作為參數(shù)傳給服務(wù)器。服務(wù)器將數(shù)據(jù)放在這個函數(shù)中返回??蛻舳说娜趾瘮?shù)收到數(shù)據(jù)后進(jìn)行處理。

請注意,JSONP 只能用于 GET 請求,不能發(fā)送 POST 或其他類型的 HTTP 請求。而且,由于它是通過插入 <script> 標(biāo)簽來工作的,所以如果服務(wù)器被惡意利用,可能會有安全問題。

到此這篇關(guān)于淺析JavaScript如何解決跨域問題并手寫一個jsonp的文章就介紹到這了,更多相關(guān)JavaScript跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript函數(shù)和作用域(經(jīng)典面試題)

    JavaScript函數(shù)和作用域(經(jīng)典面試題)

    文章系統(tǒng)梳理了JavaScript中的核心函數(shù)概念,包括閉包、詞法作用域與動態(tài)作用域的區(qū)別、call/apply/bind方法、高階函數(shù)、箭頭函數(shù)、生成器、防抖節(jié)流技術(shù)、遞歸優(yōu)缺點、純函數(shù)及函數(shù)重載與偏函數(shù),感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 常見JS驗證腳本匯總

    常見JS驗證腳本匯總

    這篇文章主要介紹了常見JS驗證腳本,結(jié)合實例形式匯總分析了JavaScript用于驗證的系統(tǒng)自帶函數(shù)與自定義函數(shù),具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • JavaScript設(shè)置獲取和設(shè)置屬性的方法

    JavaScript設(shè)置獲取和設(shè)置屬性的方法

    這篇文章主要介紹了JavaScript設(shè)置獲取和設(shè)置屬性的方法,學(xué)會使用getAttribute、setAttribute的用法,需要的朋友可以參考下
    2015-03-03
  • JavaScript修改瀏覽器tab標(biāo)題小技巧

    JavaScript修改瀏覽器tab標(biāo)題小技巧

    這篇文章主要介紹了JavaScript修改瀏覽器tab標(biāo)題小技巧,需要的朋友可以參考下
    2015-01-01
  • ionic+html5+API實現(xiàn)雙擊返回鍵退出應(yīng)用

    ionic+html5+API實現(xiàn)雙擊返回鍵退出應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了ionic+html5+API實現(xiàn)雙擊返回鍵退出應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript隨機(jī)數(shù)的組合問題案例分析

    JavaScript隨機(jī)數(shù)的組合問題案例分析

    這篇文章主要介紹了JavaScript隨機(jī)數(shù)的組合問題,結(jié)合具體案例形式分析了JavaScript隨機(jī)數(shù)的組合問題相關(guān)算法原理、實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2020-05-05
  • 史上最全JavaScript常用的簡寫技巧(推薦)

    史上最全JavaScript常用的簡寫技巧(推薦)

    這篇文章主要介紹了JavaScript常用的簡寫技巧,列舉了20條js中常用的簡寫技巧,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Javascript發(fā)送AJAX請求實例代碼

    Javascript發(fā)送AJAX請求實例代碼

    這篇文章主要介紹了Javascript發(fā)送AJAX請求的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • CocosCreator經(jīng)典入門項目之flappybird

    CocosCreator經(jīng)典入門項目之flappybird

    這篇文章主要介紹了CocosCreator經(jīng)典入門項目之flappybird,詳細(xì)說明了制作的每個步驟,還有詳盡的代碼,對CocosCreator感興趣的同學(xué),一定要看一下
    2021-04-04
  • 微信小程序表單驗證form提交錯誤提示效果

    微信小程序表單驗證form提交錯誤提示效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序表單驗證form提交錯誤提示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

溧水县| 潜江市| 松滋市| 长治县| 福海县| 冕宁县| 吴桥县| 格尔木市| 蒙山县| 芷江| 文山县| 濮阳市| 新巴尔虎右旗| 昭通市| 双柏县| 南川市| 宝坻区| 呼玛县| 循化| 金阳县| 上虞市| 类乌齐县| 克什克腾旗| 略阳县| 鹿邑县| 揭东县| 楚雄市| 广昌县| 许昌市| 宜昌市| 万荣县| 青州市| 南岸区| 石嘴山市| 永丰县| 平泉县| 沙河市| 清涧县| 屏山县| 阿瓦提县| 嘉兴市|