Vue解決跨域問題

一、Vue解決跨域問題

跨域問題是我們開發過程中常遇到的問題。前後端分離開發中,前端通過 ajax 請求數據時,往往會出現這種錯誤:Access to XMLHttpRequest at ‘http://example.com’ from origin ‘http://localhost:8080’ has been blocked by CORS policy.

CORS(Cross-Origin Resource Sharing,跨源資源共享)是 W3C 標準,它允許瀏覽器向跨源服務器請求數據,實現前後端分離開發。由於瀏覽器的同源策略,導致直接發起跨域的請求時,瀏覽器會攔截這些請求。

Vue 是一個前端框架,作為前後端分離開發中的一部分,它的開發者對於解決跨域問題也提供了多種解決方案。

二、Vue解決跨域的方法

Vue 中,我們可以通過修改服務端後台代碼、安裝插件、配置代理、使用 jsonp 等方法來解決跨域問題。

三、Vue跨域解決方案

1. 通過修改服務端代碼解決跨域問題

我們可以在服務端後台代碼中添加如下 header:

response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods','POST, GET, OPTIONS, DELETE, PUT');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type,token');
response.setHeader('Access-Control-Max-Age', '3600');

Access-Control-Allow-Origin 表示允許訪問的源,* 表示全部允許。Access-Control-Allow-Methods 表示允許的方法,Content-Type 表示發送請求的數據類型,Access-Control-Max-Age 表示緩存訪問過程中這些響應的最長時間,即在這段時間內不用再進行一次預檢請求。

2. 通過安裝插件解決跨域問題

Vue 中有很多插件可以解決跨域問題,例如:vue-resource、axios 等。可以在執行 ajax 的過程中設置 withCredentials:true,表示允許跨域請求攜帶 cookie。

// vue-resource
Vue.http.options.credentials = true;

// axios
axios.defaults.withCredentials = true;

3. 通過配置代理解決跨域問題

Vue 中可以在 config/index.js 中配置代理。通過配置代理,可以解決開發時出現跨域問題的情況。

module.exports = {
  dev: {
    proxyTable: {
      // 代理配置
      '/api': {
        target: 'http://example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

這樣,只要請求地址是以 /api 開頭的,就會被代理到 http://example.com。

4. 使用 jsonp 解決跨域問題

Jsonp 是利用 javascript 的 script 標籤,從其他域中加載數據。通過 jsonp,我們可以在當前頁面創建一個 script 標籤,該標籤的請求地址指向其他域的地址。其他域返回內容時,需要在返回數據外包裹一層函數調用。

let script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://example.com';
document.body.appendChild(script);

function callback(data) {
  // 處理數據
}

四、Vue解決跨域的三種方法

1. Vue解決跨域CORS

CORS 是一種跨域解決方案,後端支持該方案後,前端使用 XMLHttpRequest 請求 API 時,瀏覽器會自動根據 CORS 協議進行請求,從而實現跨域。

2. Vue解決跨域的三種方法之代理

通過配置代理,把請求轉到本地服務器上,再由本地服務器進行跨域請求。

module.exports = {
  dev: {
    proxyTable: {
      // 代理配置
      '/api': {
        target: 'http://example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

3. Vue解決跨域的三種方法之JSONP

使用 jsonp 可以不受跨域限制地獲取其他域的數據,使用起來非常簡單。

let script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://example.com?callback=callbackFunc';
document.body.appendChild(script);

function callbackFunc(data) {
  // 處理數據
}

五、Vue解決跨域請求

1. get 請求

this.$http.get('http://example.com', {
  params: {
    id: 123
  }
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.log(error);
});

2. post 請求

this.$http.post('http://example.com', {
  id: 123
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.log(error);
});

3. jsonp 請求

this.$http.jsonp('http://example.com', {
  params: {
    callback: 'callbackFunc',
    id: 123
  }
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.log(error);
});

六、Vue解決跨域代理

Vue 中的代理是通過 devServer 對象來實現的,該對象可以配置一些服務器的選項,例如代理、開啟 gzip 等選項。

devServer: {
  proxy: {
    '/api': {
      target: 'http://example.com',
      changeOrigin: true,
      pathRewrite: {
        '^/api': ''
      }
    }
  }
}

以上代碼表示:訪問 localhost:8080/api 將會被代理到 http://example.com。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相關推薦

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

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

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

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

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進制的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進制。 一、AES加密介紹 AE…

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

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

    編程 2025-04-29
  • Vue TS工程結構用法介紹

    在本篇文章中,我們將從多個方面對Vue TS工程結構進行詳細的闡述,涵蓋文件結構、路由配置、組件間通訊、狀態管理等內容,並給出對應的代碼示例。 一、文件結構 一個好的文件結構可以極…

    編程 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
  • 如何解決egalaxtouch設備未找到的問題

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

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

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

    編程 2025-04-28

發表回復

登錄後才能評論