前后端分離是目前開發趨勢的重要組成部分,Vue 是目前最熱門的前端框架之一,在 Vue 的開發中,涉及到跨域問題,如果不做特殊處理,瀏覽器在請求外部資源的時候會受到 Same-Origin Policy 的限制而無法正常請求。
跨域的原因是:瀏覽器的同源策略,是瀏覽器中的一種安全策略,它規定了不同域之間不能互相訪問各自的資源,這里的“不同域”指的是“協議+域名+端口”的組合。
在 Vue 請求跨域的時候,我們可以采用幾種方式來解決:
1. 服務端修改響應頭
// 服務端代碼 const express = require('express'); const app = express(); app.get('/api/data', (req, res) =>{ // 設置響應頭 res.header('Access-Control-Allow-Origin', '*'); res.json({ code: 0, message: 'success', data: { name: '張三', age: 18, }, }); }); app.listen(3000, () =>{ console.log('Server is running at http://localhost:3000'); });
2. 使用代理服務器,將Vue開發的頁面跑在和服務器同一個域名下
// vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, pathRewrite: { '^/api': '', }, }, }, }, };
3. 使用 jsonp
// 安裝 jsonp 庫 npm install jsonp --save // Vue 代碼 import jsonp from 'jsonp'; jsonp('http://localhost:3000/api/data', (err, data) =>{ if (err) { console.error(err); } else { console.log(data); } });
4. 使用 WebSocket
// 安裝 socket.io 庫 npm install socket.io --save // Vue 代碼 import io from 'socket.io-client'; const socket = io('http://localhost:3000'); socket.emit('get data', {}, (data) =>{ console.log(data); });
5. 使用 CORS(跨域資源共享)
// Vue 代碼 axios.get('http://localhost:3000/api/data', { withCredentials: true }) .then((res) =>console.log(res.data));
以上是解決Vue跨域問題的常用方法,根據實際的項目需求,我們需要選擇合適的方法。
上一篇vue 路由 不返回