国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Vue學(xué)習(xí)筆記】跨域的六種解決方案

這篇具有很好參考價(jià)值的文章主要介紹了【Vue學(xué)習(xí)筆記】跨域的六種解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

@TOC

一、跨域是什么?

跨域問(wèn)題指的是在瀏覽器端,當(dāng)一個(gè)網(wǎng)頁(yè)的腳本(如JavaScript)向另一個(gè)域名的網(wǎng)站發(fā)起請(qǐng)求時(shí),如果兩個(gè)網(wǎng)站的域名不一致,就會(huì)出現(xiàn)跨域問(wèn)題。由于瀏覽器的同源策略(Same Origin Policy),默認(rèn)情況下,腳本只能訪問(wèn)同一個(gè)域名下的資源,不能訪問(wèn)其他域名下的資源。

二、跨域問(wèn)題的解決方法

1.JSONP

JSONP (JSON with Padding) 是一種在客戶端與服務(wù)器之間進(jìn)行跨域數(shù)據(jù)傳輸?shù)慕鉀Q方案,它利用了

2.Nginx反向代理

Nginx是一款高性能的Web服務(wù)器和反向代理服務(wù)器,可以用于解決跨域問(wèn)題。具體實(shí)現(xiàn)方法是在Nginx的配置文件中添加反向代理規(guī)則,將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器,并將響應(yīng)返回給客戶端。
下面是一個(gè)簡(jiǎn)單的Nginx反向代理配置示例,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)到http://api.example.com,并解決跨域問(wèn)題。
示例代碼:

server {
  listen 80;
  server_name www.example.com;

  location /api {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
    proxy_pass http://api.example.com;
  }
}

在上面的配置中,定義了一個(gè)Nginx服務(wù)器,監(jiān)聽(tīng)80端口,并將所有以/api開(kāi)頭的請(qǐng)求轉(zhuǎn)發(fā)到http://api.example.com,同時(shí)設(shè)置了一些響應(yīng)頭信息,從而實(shí)現(xiàn)了跨域訪問(wèn)。

需要注意的是,由于涉及到跨域訪問(wèn),需要設(shè)置響應(yīng)頭的Access-Control-Allow-*字段,以允許跨域訪問(wèn)。此外,還需要設(shè)置Nginx的CORS配置,從而更好地控制跨域訪問(wèn)的安全性。

3.CORS解決跨域問(wèn)題

CORS(Cross-Origin Resource Sharing)是一種跨域資源共享的機(jī)制,可以用于解決跨域問(wèn)題。CORS機(jī)制允許服務(wù)器在響應(yīng)中設(shè)置一個(gè)Access-Control-Allow-Origin頭部,來(lái)指定允許哪些域名訪問(wèn)資源。

具體實(shí)現(xiàn)方法是,在服務(wù)器端向每一個(gè)響應(yīng)添加一個(gè)Access-Control-Allow-Origin頭部,來(lái)指定允許哪些域名訪問(wèn)資源。如果請(qǐng)求的域名與允許訪問(wèn)的域名一致,則請(qǐng)求可以順利完成;否則,瀏覽器會(huì)阻止請(qǐng)求,從而保證安全性。

下面是一個(gè)簡(jiǎn)單的CORS配置示例,用于允許http://www.example.com和https://www.example.com訪問(wèn)資源。

Access-Control-Allow-Origin: http://www.example.com,https://www.example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type

在上面的示例中,Access-Control-Allow-Origin頭部指定了允許訪問(wèn)的域名,Access-Control-Allow-Methods頭部指定了允許的HTTP方法,Access-Control-Allow-Headers頭部指定了允許的請(qǐng)求頭信息。需要注意的是,由于涉及到安全性,需要仔細(xì)控制允許訪問(wèn)的域名和請(qǐng)求頭信息,以避免安全漏洞。

需要注意的是,CORS機(jī)制只能用于瀏覽器端,即僅限于XMLHttpRequest和Fetch API這兩種請(qǐng)求。對(duì)于其他類型的請(qǐng)求,比如通過(guò)curl工具發(fā)送的請(qǐng)求,無(wú)法使用CORS機(jī)制來(lái)解決跨域問(wèn)題,需要使用其他方法,比如Nginx反向代理。

4.postMessage解決跨域問(wèn)題

postMessage是一種可以用于解決跨域問(wèn)題的技術(shù),它是HTML5中引入的一種跨文檔消息傳遞機(jī)制。具體實(shí)現(xiàn)方法是,在發(fā)送消息的窗口中調(diào)用postMessage方法,向接收消息的窗口發(fā)送消息,并在接收消息的窗口中監(jiān)聽(tīng)message事件,接收消息并進(jìn)行處理。

下面是一個(gè)簡(jiǎn)單的postMessage示例,在兩個(gè)不同域名的頁(yè)面之間進(jìn)行消息傳遞:

在發(fā)送消息的頁(yè)面中,可以使用以下代碼向接收消息的頁(yè)面發(fā)送消息:

var receiver = window.opener || window.parent;
receiver.postMessage('Hello, world!', 'http://www.example.com');

在接收消息的頁(yè)面中,可以使用以下代碼監(jiān)聽(tīng)message事件,并處理接收到的消息:

window.addEventListener('message', function(event) {
  if (event.origin !== 'http://www.example.com') return;
  console.log('Received message:', event.data);
});

在上面的代碼中,使用addEventListener方法監(jiān)聽(tīng)message事件,在事件處理函數(shù)中判斷消息來(lái)源是否合法,并進(jìn)行處理。

需要注意的是,postMessage技術(shù)可以用于解決跨域問(wèn)題,但也存在一定的安全風(fēng)險(xiǎn)。因?yàn)閜ostMessage方法可以向任意窗口發(fā)送消息,如果接收消息的窗口沒(méi)有進(jìn)行安全控制,可能會(huì)被惡意網(wǎng)站利用,從而造成安全漏洞。因此,在使用postMessage技術(shù)時(shí),需要仔細(xì)考慮安全性問(wèn)題,并進(jìn)行必要的安全控制。

5.WebSocket解決跨域問(wèn)題

WebSocket是一種可以用于解決跨域問(wèn)題的技術(shù),它是HTML5中引入的一種雙向通信協(xié)議。WebSocket協(xié)議使用標(biāo)準(zhǔn)的HTTP端口(80和443),可以通過(guò)HTTP代理服務(wù)器進(jìn)行通信,因此可以用于跨域通信。

下面是一個(gè)簡(jiǎn)單的WebSocket示例,在兩個(gè)不同域名的頁(yè)面之間進(jìn)行通信:

在客戶端頁(yè)面中,可以使用以下代碼建立WebSocket連接:

var socket = new WebSocket('ws://www.example.com/socket');
socket.addEventListener('open', function(event) {
  console.log('WebSocket connected');
  socket.send('Hello, world!');
});
socket.addEventListener('message', function(event) {
  console.log('Received message:', event.data);
});

在服務(wù)端頁(yè)面中,可以使用以下代碼監(jiān)聽(tīng)WebSocket連接,并處理接收到的消息:

var WebSocketServer = require('ws').Server;
var server = new WebSocketServer({ port: 8080 });
server.on('connection', function(socket) {
  console.log('WebSocket connected');
  socket.on('message', function(message) {
    console.log('Received message:', message);
    socket.send('Hello, world!');
  });
});

在上面的代碼中,使用WebSocket對(duì)象的send方法向服務(wù)端發(fā)送消息,并使用addEventListener方法監(jiān)聽(tīng)message事件,在事件處理函數(shù)中處理接收到的消息。

需要注意的是,WebSocket技術(shù)可以用于解決跨域問(wèn)題,但也存在一定的安全風(fēng)險(xiǎn)。因?yàn)閃ebSocket協(xié)議允許任意域名的頁(yè)面建立連接,如果服務(wù)端沒(méi)有進(jìn)行安全控制,可能會(huì)被惡意網(wǎng)站利用,從而造成安全漏洞。因此,在使用WebSocket技術(shù)時(shí),需要仔細(xì)考慮安全性問(wèn)題,并進(jìn)行必要的安全控制。

6.devServer代理跨域

在Webpack中,可以使用devServer配置中的proxy選項(xiàng)進(jìn)行跨域代理。devServer代理跨域可以將請(qǐng)求代理到另一個(gè)服務(wù)器,從而解決跨域問(wèn)題。具體實(shí)現(xiàn)方法是,在Webpack的配置文件中配置devServer選項(xiàng),設(shè)置proxy選項(xiàng),將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器,并在響應(yīng)中添加Access-Control-Allow-Origin頭部,實(shí)現(xiàn)跨域訪問(wèn)。

下面是一個(gè)簡(jiǎn)單的devServer代理跨域示例配置:

devServer: {
  proxy: {
    '/api': {
      target: 'http://www.example.com',
      changeOrigin: true,
      pathRewrite: { '^/api': '' },
      headers: {
        'Access-Control-Allow-Origin': '*'
      }
    }
  }
}

在上面的配置中,定義了一個(gè)代理規(guī)則,將所有以/api開(kāi)頭的請(qǐng)求轉(zhuǎn)發(fā)到http://www.example.com,并設(shè)置了一些選項(xiàng),比如changeOrigin表示是否修改請(qǐng)求頭中的Host字段,pathRewrite表示是否對(duì)請(qǐng)求路徑進(jìn)行重寫(xiě),headers表示需要添加到響應(yīng)頭中的頭部信息。

需要注意的是,由于涉及到跨域訪問(wèn),需要設(shè)置響應(yīng)頭的Access-Control-Allow-Origin字段,以允許跨域訪問(wèn)。此外,還需要設(shè)置Nginx的CORS配置,從而更好地控制跨域訪問(wèn)的安全性。

需要注意的是,devServer代理跨域只適用于開(kāi)發(fā)環(huán)境,不適用于生產(chǎn)環(huán)境。在生產(chǎn)環(huán)境中,需要使用其他跨域解決方案,比如Nginx反向代理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-689758.html

到了這里,關(guān)于【Vue學(xué)習(xí)筆記】跨域的六種解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 跨域的五種最常見(jiàn)解決方案

    在開(kāi)發(fā)Web應(yīng)用程序時(shí),一個(gè)常見(jiàn)的問(wèn)題是如何處理跨域請(qǐng)求??缬蛘?qǐng)求是指來(lái)自不同源的請(qǐng)求,這些請(qǐng)求可能會(huì)受到瀏覽器的限制而不能被正常處理。在這篇文章中,我們將探討跨域請(qǐng)求的常見(jiàn)解決方案,并了解每種解決方案的優(yōu)缺點(diǎn)。 一、JSONP JSONP是一種常見(jiàn)的跨域請(qǐng)求解

    2024年02月01日
    瀏覽(100)
  • axios如何解決跨域的方案

    由于解決跨域需要用到headers屬性,所以在axios形參中需要用對(duì)象形式包裹,同時(shí)api接口也要放在url屬性當(dāng)中, 廢話不多說(shuō),直接上代碼,然后在請(qǐng)求接口 ---- 到瀏覽器的控制臺(tái) — 點(diǎn)擊剛剛請(qǐng)求的接口 ---- 找到Request Headers 下 ----application/octet-stream ,如果有看到這個(gè)屬性代表解

    2024年02月11日
    瀏覽(91)
  • vue解決跨域的幾種辦法

    vue解決跨域的幾種辦法

    當(dāng)我們遇到請(qǐng)求后臺(tái)接口遇到 Access-Control-Allow-Origin 時(shí),那說(shuō)明跨域了。 跨域是因?yàn)闉g覽器的同源策略所導(dǎo)致,同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,同源是指:域名、協(xié)議、端口相同 解決跨域常用方法: 一、VUE中常用proxy來(lái)解決跨

    2024年02月15日
    瀏覽(95)
  • Vue2解決跨域的3種方式

    1.1 jsonp 以前的技術(shù),通過(guò)script標(biāo)簽跨域請(qǐng)求,服務(wù)器端返回的是符合js語(yǔ)法的函數(shù)調(diào)用,函數(shù)的形參即數(shù)據(jù) 1.2 CORS 跨域資源共享,需要服務(wù)器端進(jìn)行配置 1.3 ?服務(wù)器代理 (1) 通過(guò)在vue.config.js中配置proxy實(shí)現(xiàn)跨域 (開(kāi)發(fā)階段) (2) 通過(guò)Nginx服務(wù)器代理實(shí)現(xiàn)跨域 (生產(chǎn)階段

    2024年02月04日
    瀏覽(23)
  • vue如何解決跨域的問(wèn)題,有哪幾種方式?

    vue如何解決跨域的問(wèn)題,有哪幾種方式?

    在使用axios發(fā)送請(qǐng)求之后,沒(méi)有得到返回的數(shù)據(jù),打開(kāi)控制臺(tái)發(fā)現(xiàn)如下圖所示的報(bào)錯(cuò): 這是提示跨域了。所有使用JavaScript的瀏覽器都會(huì)支持同源策略。同源策略即指域名/協(xié)議/端口號(hào)相同。只要有一個(gè)不同,就會(huì)當(dāng)作跨域請(qǐng)求。? 解決方法為: 1. CORS 后端通過(guò) CORS 解決跨域

    2024年02月08日
    瀏覽(94)
  • AJAX學(xué)習(xí)筆記8 跨域問(wèn)題及解決方案

    AJAX學(xué)習(xí)筆記8 跨域問(wèn)題及解決方案

    AJAX學(xué)習(xí)筆記7 AJAX實(shí)現(xiàn)省市聯(lián)動(dòng)_biubiubiu0706的博客-CSDN博客 跨域:指一個(gè)域名的網(wǎng)頁(yè)去請(qǐng)求另外一個(gè)域名資源.比如百度頁(yè)面去請(qǐng)求京東頁(yè)面資源. 同源與不同源三要素:協(xié)議,域名,端口 協(xié)議一致,域名一致,端口一致.才算是同源.其他一律不同源 新建項(xiàng)目 測(cè)試: 1.window.open(); window.lo

    2024年02月09日
    瀏覽(89)
  • vue組件間傳值的六種方法

    vue組件間傳值的六種方法

    父組件代碼: 子組件代碼: 頁(yè)面顯示: 子組件代碼: 父組件代碼: 頁(yè)面顯示: 父子組件傳值原理:父子組件的關(guān)系可以總結(jié)為 prop 向下傳遞,事件向上傳遞。父組件通過(guò) prop 給子組件下發(fā)數(shù)據(jù),子組件通過(guò)事件給父組件發(fā)送消息,如下圖所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    瀏覽(30)
  • npm install 卡住不動(dòng)的六種解決方法

    檢查網(wǎng)絡(luò)設(shè)置,刪除node_modules重新npm install npm install 時(shí),卡住不動(dòng),五種解決方法

    2024年01月17日
    瀏覽(86)
  • Vue首屏加載過(guò)慢出現(xiàn)白屏的六種優(yōu)化方案

    Vue首屏加載過(guò)慢出現(xiàn)白屏的六種優(yōu)化方案

    公司業(yè)務(wù)展示官網(wǎng)開(kāi)發(fā),構(gòu)建版本后在測(cè)試環(huán)境下,發(fā)下首屏加載損耗高達(dá)幾十秒(服務(wù)器在國(guó)外,所以也導(dǎo)致加載時(shí)間變長(zhǎng)),于是采用了以下方法來(lái)達(dá)到提速目的。? 路由懶加載和組件懶加載:const One = ()=import(\\\"./one\\\"); 圖片懶加載:使用vue-lazyload插件 gizp壓縮是一種http請(qǐng)

    2023年04月10日
    瀏覽(29)
  • 在uniapp Vue3版本中如何解決web/H5網(wǎng)頁(yè)瀏覽器跨域的問(wèn)題

    在uniapp Vue3版本中如何解決web/H5網(wǎng)頁(yè)瀏覽器跨域的問(wèn)題

    uniapp項(xiàng)目在瀏覽器運(yùn)行,有可能調(diào)用某些接口會(huì)出現(xiàn)跨域問(wèn)題,報(bào)錯(cuò)如下圖所示: 存在跨域問(wèn)題的原因是因?yàn)闉g覽器的同源策略,也就是說(shuō)前端無(wú)法直接發(fā)起跨域請(qǐng)求。同源策略是一個(gè)基礎(chǔ)的安全策略,但是這也會(huì)給uniapp/Vue開(kāi)發(fā)者在部署時(shí)帶來(lái)一定的麻煩。一般來(lái)說(shuō),瀏覽

    2024年01月21日
    瀏覽(84)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包