Vue中axios跨域請求解決方法

語言: CN / TW / HK

highlight: default

前言

跨域

指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器對 JavaScript 施加的安全限制。

同源

指的是域名,協議,埠均相同,瀏覽器執行 js 指令碼時,會檢查這個指令碼屬於哪個頁面,如果不是同源頁面,就不會被執行。

以下舉例:

```javascript (1)http://www.123.com/index.html 呼叫 http://www.123.com/server.php (非跨域)

(2)http://www.123.com/index.html 呼叫 http://www.456.com/server.php (主域名不同:123/456,跨域)

(3)http://abc.123.com/index.html 呼叫 http://def.123.com/server.php (子域名不同:abc/def,跨域)

(4)http://www.123.com:8080/index.html 呼叫 http://www.123.com:8081/server.php (埠不同:8080/8081,跨域)

(5)http://www.123.com/index.html 呼叫 http://www.123.com/server.php (協議不同:http/https,跨域)

(6)localhost和127.0.0.1雖然都指向本機,但也屬於跨域。 ```

一,前端解決之 代理

1. vue-cli 2.x 版本解決方法如下

```js // config/index.js

module.exports = { dev: { // ...

// 跨域配置
proxyTable: {
  '/api': {
    // target: 'http://192.168.2.3:8888', //介面域名
    target: 'http://localhost:8888', //介面域名
    changeOrigin: true, //是否跨域
    pathRewrite: {
      '^/api': '', //將 '/api' 替換為空
    },
  },
},

// ...

}, } ```

(1) Vue 的 config 資料夾下的 index.js 檔案中,在 proxyTable 物件中書寫跨域配置項:將以 /api 開頭的請求地址基礎 URL 替換為 http://localhost:8888

(2)將 axios 的 baseURL 改為 /api

2. vue-cli 3.x 版本解決方法如下

```js // vue.config.js

module.exports = { devServer: { // ...

// 跨域配置
proxy: {
  // 介面是以 /api 開頭的需要代理
  '/api': {
    target: `http://api.mz-moe.cn`, // 代理介面地址。實際請求介面地址會是:http://api.mz-moe.cn/api/xxx/xxx
    changeOrigin: true, // 預設false,是否需要改變原始主機頭為目標URL
    ws: true, // 是否代理websockets
    pathRewrite: {
      '^/api': '', // 重寫請求。實際介面中並沒有 /api,所以需要替換為空 ''
    },
  },
},

// ...

}, } ```

(1)在專案根目錄下建立全域性配置檔案 vue.config.js

(2)在配置檔案中書寫跨域配置(如下圖)

(3)將 axios 的 baseURL 改為 /api

二,後端 springboot 專案解決之 配置項

推薦在服務端進行跨域相關配置,在專案中新建允許跨域配置類,如下圖。