在vue项目中发请求时报了No ‘Access-Control-Allow-Origin’ header is present on the requested resource这个错误,这个错误就是典型的跨域问题

之所以会引发跨域问题,是因为

  • 不同协议的网站不能相互访问
    https://baidu.com 不能访问 http.baidu.com ,因为他们一个是http协议,一个是https协议
  • 不同ip或者域名下的网站不能相互访问
    https://baidu.com 不能访问 https://csdn.com
    http://10.111.115.31 不能访问http://12.889.64.31
  • 通过域名或者ip访问同一台服务器也属于跨域
    假设http://10.111.115.31映射的域名是www.abc.com,它们之间相互访问就属于跨域问题。

因为一般我们的本地服务器地址是localhost8080,而后台给我们的地址可能是http://xxxx8181的,所以就会产生跨域的问题。要解决这个问题,如果你是vue项目且用axios的话,可以按照以下步骤进行解决。

1.在config文件下的index.js中的proxyTable加入以下代码:

在这里插入图片描述

 proxyTable: {
      '/api':{
        target: "http://123.xx.xx.xx:8181/shoppiing/",
        changeOrigin:true,
        pathRewrite:{
            '^/api':''
        }
      }
    },

2.在main.js添加axios的baseURL和hearder:

(请求地址可以看作是baseURL+url)

import Vue from 'vue'
import App from './App'
import Axios from 'axios'

Vue.prototype.$axios = Axios
Axios.defaults.baseURL = '/api'
Axios.defaults.headers.post['Content-Type'] = 'application/json';

Vue.config.productionTip = false

3.然后发请求的时候就可以直接发了:

async reginst () {
        const res = await this.$http.post('user/add', this.Rform)
        console.log(res)
      },

这里的this.Rform是我发post请求时要携带的数据,此案例中我所请求的地址为http://123.xx.xx.xx:8181/shopping/user/add

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐