zoukankan      html  css  js  c++  java
  • Vue项目中解决跨域问题

    背景:由于浏览器的同源政策,在不同协议、域名、端口时进行数据访问将会出现跨域问题

    常见的解决方式有以下几种

    jsonp跨域

    利用script天然的跨域属性进行跨域操作

    jquery ajax实现

    $.ajax({
      url: 'http://www.test.com:8888/getData',
      type: 'get',
      dataType: 'jsonp',  // 请求方式为jsonp
      jsonpCallback: "handleCallback",    // 自定义回调函数名
      data: {}
    })
    

    proxy代理

    原理

    因为客户端请求服务端的数据是存在跨域问题的,而服务器和服务器之间可以相互请求数据,是没有跨域的概念(如果服务器没有设置禁止跨域的权限问题)

    也就是说,我们可以配置一个代理的服务器可以请求另一个服务器中的数据,然后把请求出来的数据返回到我们的代理服务器中,代理服务器再返回数据给我们的客户端,这样我们就可以实现跨域访问数据。

    所以proxy的原理是 将域名发送给本地的服务器(启动vue项目的服务,loclahost:8080),再由本地的服务器去请求真正的服务器。

    背景

    在配置axios时通常会配置baseUrl,即

     axios.defaults.baseURL = 'http://××××××××××××/' // 默认地址
    

    于是在写axios时就可以省略基地址,例如

    import axios from '@/utils/myaxios'
    export function dictListByType (dictType) {
      return axios({
        // url: '/user/login',
        url: 'dict/get/dictListByType',
        params: {
          dictType
        }
      })
    }
    

    此时需要做的修改如下

    axios.defaults.baseURL = '/api'//作用是我们每次发送的请求都会带一个/api的前缀。
    

    再在vue.config.js中进行配置

    module.exports = {
       devServer: {
         proxy: { // 配置跨域
           '/api': {
             target: 'http://172.16.25.174:8043', // 这里后台的地址模拟的;应该填写你们真实的后台接口
             changOrigin: true, // 允许跨域
             pathRewrite: {
               '^/api': ''
             }
           }
         }
       },
      publicPath: './',
      lintOnSave: false,
      productionSourceMap: false
    }
    
    
  • 相关阅读:
    百度地图 android SDKv2.2.0
    由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。System.Threading.ThreadAbortException
    jquery.autocomplete 搜索文字提示
    【444】Data Analysis (shp, arcpy)
    【442】Remote control GUP Linux
    【441】JSON format
    【440】Tweet 元素意义
    Spark(八)JVM调优以及GC垃圾收集器
    Spark(七)Spark内存调优
    Spark(六)Spark之开发调优以及资源调优
  • 原文地址:https://www.cnblogs.com/axu1997/p/13609152.html
Copyright © 2011-2022 走看看